大数相加的问题我是今年的5月份的时候曾经写过相关的代码,但是今天用到的时候却编译怎么也通不过去,后来发现在初始化的时候发现了错误,不过整体而言,大数相加是大数运算中应该是最简单的一种了吧。只需注意进位即可,还有就是用字符串来处理(估计是废话,因为谁都知道),那么我们需要注意的又是什么呢,当然,注意的就是细节问题,首先我们应该对输入的字符进行倒置,为什么这样做,想想小学时你是怎么运算的就应该知道了,还有就是进位,这两个应该是关键的两点,剩下的就是输出,想想输出应该怎么输出,需要注意下什么。好了,我用5月份的在hdoj上做的题来说明这个问题吧,想通了还是很简单,我直接上代码,不懂的再问。
C语言:
Codee#14290
#include <stdio.h>
#include <string.h>
int main()
{
char a [ 1000 ],b [ 1000 ], c [ 1000 ], d [ 1000 ];
int n , l1 , l2 , i , j , k = 1 , m;
scanf( "%d" , &n);
m =n;
while(n --)
{
j = 0;
memset( a , '/0' , sizeof( a));
memset(b , '/0' , sizeof(b));
memset( c , '/0' , sizeof( c));
memset( d , '/0' , sizeof( d));
scanf( "%s%s" , a ,b);
l1 = strlen( a);
l2 = strlen(b);
for( i = l1 - 1; i >= 0; i --)
{
c [ j ++ ] = a [ i ] - '0';
}
j = 0;
for( i = l2 - 1; i >= 0; i --)
{
d [ j ++ ] =b [ i ] - '0';
}
if( l1 < l2) l1 = l2;
for( i = 0; i < l1; i ++)
{
c [ i ] += d [ i ];
if( c [ i ] >= 10)
{
c [ i ] = c [ i ] - 10;
c [ i + 1 ] ++;
}
}
printf( "Case %d: /n " , k ++);
printf( "%s + %s = " , a ,b);
for( i = l1 - 1; i >= 0; i --)
printf( "%d" , c [ i ]);
printf( " /n ");
if( k != m + 1)
printf( " /n ");
}
return 0;
}
#include <string.h>
int main()
{
char a [ 1000 ],b [ 1000 ], c [ 1000 ], d [ 1000 ];
int n , l1 , l2 , i , j , k = 1 , m;
scanf( "%d" , &n);
m =n;
while(n --)
{
j = 0;
memset( a , '/0' , sizeof( a));
memset(b , '/0' , sizeof(b));
memset( c , '/0' , sizeof( c));
memset( d , '/0' , sizeof( d));
scanf( "%s%s" , a ,b);
l1 = strlen( a);
l2 = strlen(b);
for( i = l1 - 1; i >= 0; i --)
{
c [ j ++ ] = a [ i ] - '0';
}
j = 0;
for( i = l2 - 1; i >= 0; i --)
{
d [ j ++ ] =b [ i ] - '0';
}
if( l1 < l2) l1 = l2;
for( i = 0; i < l1; i ++)
{
c [ i ] += d [ i ];
if( c [ i ] >= 10)
{
c [ i ] = c [ i ] - 10;
c [ i + 1 ] ++;
}
}
printf( "Case %d: /n " , k ++);
printf( "%s + %s = " , a ,b);
for( i = l1 - 1; i >= 0; i --)
printf( "%d" , c [ i ]);
printf( " /n ");
if( k != m + 1)
printf( " /n ");
}
return 0;
}