Aaron学习笔记

少壮不努力,长大没饭吃!
posts - 4, comments - 13, trackbacks - 0, articles - 37

大整数相加

Posted on 2009-05-26 23:33 赞劲小子 阅读(254) 评论(0)  编辑 收藏 引用

自己写大整数数相加,估计效率很低吧,呵呵

#include "stdio.h"
#include 
"stdlib.h"
#include 
"string.h"

void addBigNumber(char *str1, char *str2);

void main(){
    
char str1[100];
    
char str2[100];
    printf(
"请输入第一个大整数:\n");
    gets(str1);
    printf(
"请输入第二个大整数:\n");
    gets(str2);
    
if(strlen(str1) >= strlen(str2))
        addBigNumber(str1,str2);
    
else
        addBigNumber(str2,str1);
    
return;
}


void addBigNumber(char *str1, char *str2){
    register 
char *s1 = str1;
    register 
char *s2 = str2;
    register 
int flag = 0;
    register 
int number = 0;

    
/*现将s1和s2置于末尾,'\0'的前面*/
    
while(*s1 != '\0')
        s1
++;
    
while(*s2 != '\0')
        s2
++;
    
--s1;
    
--s2;
    
    
if(strlen(str1) >= strlen(str2))
    
{
        
while( s2 != str2)
        
{
            number 
= (*s1 - 0x30+ (*s2 - 0x30+ flag;

            
if(number >= 10){
                
*s1 = (number - 10+ 0x30 ;
                flag 
= 1;
            }

            
else
            
{
                
*s1 = number + 0x30;
                flag 
= 0;
            }

            s1
--;
            s2
--;
        }


        number 
= (*s1 - 0x30+ (*s2 - 0x30+ flag;
        
/*
         *处理像1234343+121 12121+9878,s1 至少比 s2长一位时的加法
        
*/

        
if(s1 != str1){
        
            
if(number >= 10)
            
{
                
*s1 = (number - 10+ 0x30 ;
                flag 
= 1;
            }

            
else
            
{
                
*s1 = number + 0x30;
                flag 
= 0;
            }

            s1
--;
            
*s1 = (*s1 -0x30+ flag + 0x30;
        }

        
/*
         *处理像1211+2212 8787+7676 s1和s2位数相等时的加法
        
*/


        
else if(s1 == str1 )
        
{
            
/*这里是位数相等,但最高位要进1时的处理*/
            
if(number > 10){
                
/*这里要包含'\0'*/
                
while(*s1 != '\0')
                
{
                    s1
++;
                }


                
while(s1 != str1){
                    
*(s1+1= *s1;
                    s1
--;
                }

                
*(s1+1= *s1;
                s1
++;
                
*s1 = (number - 10+ 0x30;
                s1
--;
                
*s1 = 1 + 0x30;     
            }

            
/*这里是位数相等,但最高位不1时的处理*/
            
else
            
{
                
*s1 = number + 0x30;
            }

        }

    }

    printf(
"%s",str1);
}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理