杭电ojACM1002题目
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
char A[1500];
char B[1500];
int num1[2000];
int num2[2000];
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
for(int i=0;i<T;i++)
{
scanf("%s",A);
scanf("%s",B);
int len1=strlen(A);
int len2=strlen(B);
int len=len1>len2?len1:len2;
printf("Case ");
printf("%d",i+1);
printf(":\n");
for(int j=len1-1,m=0;j>=0;j--)
{
num1[m]=A[j]-48;
printf("%d",num1[m]);
m++;
}
printf(" + ");
for(int k=len2-1,n=0;k>=0;k--)
{
num2[n]=B[k]-48;
printf("%d",num2[n]);
n++;
}
printf(" = ");
for(int x=0;x<len;x++){
num1[x]+=num2[x];
if(num1[x]>9){
num1[x+1]+=1;
num1[x]-=10;
}
}
if(num1[len]>0)
{
for(int m=len;m>=0;m--)
{
printf("%d",num1[m]);
}
}
else{
for(int n=len-1;n>=0;n--)
{
printf("%d",num1[n]);
}
}
printf("\n");
if(i<=T-2)
{
printf("\n");
}
}
return 0;
}
运行结果:
本人调试过都是正确的数据,思路就是先输入两串字符串,转化为整型串,然后分别相加再进位。
下面还有一种:(ps 本人调试过,每次都是在结尾处多一个0,希望大家能帮忙看看)
#include<string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int n,i,sum=0,length1,length2,length3,length,j,k=0,t=0,s,p=0,q=0,flag1,flag2,u=0,v=0;
int c1[50],d1[50],e[50];
char a[20],b[20];
cin>>n;
for(s=1;s<=n;s++)
{
scanf("%s",a);
scanf("%s",b);
cout<<"Case "<<s<<":"<<endl;
for(i=0;a[i]>0;i++)
{
c1[i]=a[i]-'0';
cout<<c1[i];
}
length1=strlen(a);
length2=strlen(b);
length=length1>length2?length1:length2;
cout<<" + ";
for(j=0;b[j]>0;j++)
{
d1[j]=b[j]-'0';
cout<<d1[j];
}
cout<<" = ";
for(u=0,v=0;u<length1&&v<length2;u++,v++)
{
sum=t+c1[length1-u-1]+d1[length2-v-1];
if(sum>=10)
{
e[k]=sum-10;
t=sum/10;
}
else
{
e[k]=sum;
t=0;
}
k++;
sum=0;
}
for(int z=0;z<k;z++)
cout<<e[k-z-1];
cout<<endl<<endl;
for(int z=0;e[z]!='\0';z++)
e[z]='\0';
}
for(int y=0;y<k;y++)
{
e[y]='\0';
t=0;
}
return 1;
}
运行结果:
就是这里:第二个结果这里会多一个0
但是如果只循环一次结果就是正确的
如果有人发现我哪里有问题了,请帮忙指出来,谢谢大家!有东西一起分享,互相学习,互相借鉴!