大数+大数。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char * add(char *a ,char *b ,char *c)
{
int lena = strlen(a);
int lenb = strlen(b);
int lenc = 0;
int righta ,rightb ;
righta = lena -1 ;
rightb = lenb - 1;
int up = 0;
int x,y,z;
while(righta >=0 || rightb >=0)
{
if(righta < 0) x = 0 ; else x = a[righta--] - '0';
if(rightb < 0) y = 0 ; else y = b[rightb--] - '0';
z = x+y + up;
//处理进位
if(z >= 10)
{
up = z/10;
z = z%10;
}
else up = 0;
c[lenc++] = z+'0';
}
if(up) c[lenc++] = up + '0';
c[lenc] = 0;
for(int i=0 ; i<lenc/2 ; i++)
{
char t;
t = c[i];c[i]=c[lenc-i-1];c[lenc-i-1]=t;
}
return c;
}
int main()
{
FILE *pInput;
pInput = fopen("input.txt","r");
char a[110],b[110],c[110];
while(fscanf(pInput,"%s%s",a,b) == 2)
{
printf("%s\n",add(a,b,c));
}
fclose(pInput);
return 0;
}
需要在同目录下新建输入文件,文件名为input.txt,可以有多行,每行两个数字,空格隔开,例如
input。txt:
123456 654321
7451 258
直接执行,结果会在屏幕上输出,如果需要输出到文件,则可以做如下修改:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char * add(char *a ,char *b ,char *c)
{
int lena = strlen(a);
int lenb = strlen(b);
int lenc = 0;
int righta ,rightb ;
righta = lena -1 ;
rightb = lenb - 1;
int up = 0;
int x,y,z;
while(righta >=0 || rightb >=0)
{
if(righta < 0) x = 0 ; else x = a[righta--] - '0';
if(rightb < 0) y = 0 ; else y = b[rightb--] - '0';
z = x+y + up;
//处理进位
if(z >= 10)
{
up = z/10;
z = z%10;
}
else up = 0;
c[lenc++] = z+'0';
}
if(up) c[lenc++] = up + '0';
c[lenc] = 0;
for(int i=0 ; i<lenc/2 ; i++)
{
char t;
t = c[i];c[i]=c[lenc-i-1];c[lenc-i-1]=t;
}
return c;
}
<pre name="code" class="cpp">int main()
{
FILE *pInput,*pOut;
pInput = fopen("in.txt","r");
pOut = fopen("out.txt","w");
char a[110],b[110],c[110];
while(fscanf(pInput,"%s%s",a,b) == 2)
{
fprintf(pOut,"%s\n",add(a,b,c));
}
fclose(pInput);
fclose(pOut);
return 0;
}
标准输入输出的,可以直接对main函数修改,将文件相关的都去掉:
int main()
{
char a[110],b[110],c[110];
while(scanf("%s%s",a,b) == 2)
{
printf("%s\n",add(a,b,c));
}
return 0;
}