你这个 a,b 是十进制形式输入输出吗?有没有前导零?
#include <cstdio>
int main( void )
{
// 2^1024 使用十进制表示,需要309位
char a[310]; size_t ai;
char b[310]; size_t bi;
scanf(" %*[0]"); scanf("%s%zn", a, &ai );
scanf(" %*[0]"); scanf("%s%zn", b, &bi );
// 2^1025 使用十进制表示,需要309位
char c[310];
char* p = c + sizeof(c);
*--p = '\0';
for( char carry=0; ; )
{
carry += (ai!=0?a[--ai]-'0':0) + (bi!=0?b[--bi]-'0':0);
*--p = '0' + carry%10;
carry /= 10;
if( ai==0 && bi==0 )
{
if( carry!=0 || *p=='\0' )
*--p = '0' + carry;
break;
}
}
puts( p );
}
没有考虑输入为0的情况,因为题目中说了“2^128<a,b<2^1024”
输入 06 9999 输出 10005
输入 9999 06 输出 10005
输入
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216
输出
359538626972463181545861038157804946723595395788461314546860162315465351611001926265416954644815072042240227759742786715317579537628833244985694861278948248755535786849730970552604439202492188238906165904170011537676301364684925762947826221081654474326701021369172596479894491876959432609670712659248448274432