64,673
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
scanf("%d",&n);
for (j=0;j<n;j++) {
scanf("%s%s",a1,a2);
L=strlen(a1);
for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';
L=strlen(a2);
for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';
for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];
for (i=0;i<MAXLEN;i++) {
if (v3[i]>=10) {
v3[i+1]+=v3[i]/10;
v3[i]=v3[i]%10;
}
}
printf("Case %d:\n", j+1);
printf("%s + %s = ", a1, a2);
z=0;
for (i=MAXLEN-1;i>=0;i--) {
if (z==0) {
if (v3[i]!=0) {
printf("%d",v3[i]);
z=1;
}
} else {
printf("%d",v3[i]);
}
}
if (z==0) printf("0");
printf("\n");
}
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110
#include<iostream>
#include<string.h>
const int N=1000;
using namespace std;
typedef struct DATA{
int num[1000];
int len;
}DATA;
//翻转大数
DATA turnstr(DATA &data)
{
int t;
int midlen=data.len/2;
int lastnum=data.len-1;
for(int i=0;i<midlen;i++)
{
t=data.num[i];
data.num[i]=data.num[lastnum];
data.num[lastnum]=t;
lastnum--;
}
return data;
}
//将输入的char型大数数组 转化 为int型大数数组
DATA chartoint(char *str,DATA &data)
{
memset(data.num, 0, sizeof(data.num));//要把大于data.len的那些位置0。。
data.len=strlen(str);
for(int i=0;i<data.len;i++)
data.num[i]=(int)str[i]-'0';
return data;
}
//输出大数
void output(DATA data)
{
for(int i=0;i<data.len;i++)
cout<<data.num[i];
cout<<endl;
}
//加法
DATA plus(DATA &data1,DATA &data2,DATA &data)
{
int maxlen=(data1.len>=data2.len)?data1.len:data2.len;
data.len=maxlen;
int add=0;
for(int i=0;i<maxlen;i++)
{
//如果前边不置0,当长度不同时这里就会有问题。
//例如1+10, 会变成x1+10, 其中x是个随机数, 所以出来的答案就错了。。
data.num[i]=(data1.num[i]+data2.num[i]+add) %10;
if(data1.num[i]+data2.num[i]+add >=10)
add=1;
else add=0;
}
if (add==1) //加完最后一位还要进位的情况
{
data.len++;
data.num[data.len-1]=1;
}
return data;
}
int main()
{
char str1[N];
char str2[N];
DATA data1;
DATA data2;
DATA data;
cout<<"请输入两个大数:"<<endl;
gets(str1);
gets(str2);
output(turnstr( plus(turnstr(chartoint(str1,data1)), turnstr(chartoint(str2,data2)) ,data)));
return 0;
}