64,683
社区成员
发帖
与我相关
我的任务
分享
#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 <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int main()
{
int num,la,lb,c[20][1001],flag[20];
char a[20][1001],b[20][1001];
scanf("%d",&num);
for(int i=0;i<num;i++) //i代表计算组数
{
int sum=0,temp=0,j=0,la=0,lb=0; //temp代表进位
scanf("%s%s",a[i],b[i]);
la=strlen(a[i])-1;
lb=strlen(b[i])-1;
while(la >=0|| lb>=0)
{
sum = 0;
if(la>=0)
sum+=(a[i][la]-48);
if(lb>=0)
sum+=(b[i][lb]-48);
sum += temp;
c[i][j++]=sum%10;
temp=sum/10;
la--;
lb--;
}
flag[i]=j-1;
}
for(int i=0;i<num;i++)
{
printf("Case %d:\n",i+1);
printf("%s + %s = ",a[i],b[i]);
for(int m=flag[i];m>=0;m--)
printf("%d",c[i][m]);
if(i!=num-1)
printf("\n\n");
else
printf("\n");
}
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,len1,len2,j,k,pi,t,flag;
char str1[1010],str2[1010];
scanf("%d",&n);
for(i=1;i<=n;i++)
{
int a[1200]={0};
flag=0;
printf("Case %d:\n",i);
scanf("%s%s",str1,str2);//以字符串形式读入
len1=strlen(str1);
len2=strlen(str2);
printf("%s + %s = ",str1,str2);
j=len1-1;
k=len2-1;
pi=0;
while(j>=0&&k>=0)//开始相加
{
if(a[pi]+(str1[j]-'0')+(str2[k]-'0')>=10)//相加后大于10的
{
a[pi]=a[pi]+(str1[j]-'0')+(str2[k]-'0')-10;
a[pi+1]++;
}
else
a[pi]=a[pi]+(str1[j]-'0')+(str2[k]-'0');
pi++;
k--;
j--;
}
if(j>=0)
{
for(t=j;t>=0;t--)
{
a[pi]=a[pi]+(str1[t]-'0');
pi++;
}
}
else if(k>=0)
{
for(t=k;t>=0;t--)
{
a[pi]=a[pi]+str2[t]-'0';
pi++;
}
}
else if(a[pi]!=0)//对于位数相同2个数加后最高位大于10的
pi++;
for(t=pi-1;t>=0;t--)
{
if(a[t]==0&&flag==0)//处理一次啊前导0,估计属于无用的一步
continue;
else
{
flag=1;
printf("%d",a[t]);
}
}
printf("\n");
if(i!=n)//对于2组之间加空行的情况
printf("\n");
}
return 0;
}
感觉输入和输出的位置和LZ不同,LZ可以跑一下看
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int main()
{
int num,la,lb,c[20][1005],flag[20];
char a[1001],b[1001];
scanf("%d",&num);
for(int i=0;i<num;i++) //i代表计算组数
{
int sum=0,temp=0,j=0,la=0,lb=0; //temp代表进位
scanf("%s%s",a,b);
la=strlen(a);
lb=strlen(b);
while(la > 0 || lb > 0)
{
sum = 0;
if(la-- > 0)
sum+=(a[la]-48);
if(lb-- > 0)
sum+=(b[lb]-48);
sum += temp;
c[i][j++]=sum%10;
temp=sum/10;
}
flag[i]=j-1;
}
for(int i=0;i<num;i++)
{
printf("Case %d:\n",i+1);
printf("%s + %s = ",a,b);
for(int m=flag[i];m>=0;m--)
printf("%d",c[i][m]);
if(i!=num-1)
printf("\n\n");
}
return 0;
}
#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
int num,la,lb,c[1001];
char a[1001],b[1001];
scanf("%d",&num);
for(int i=0;i<num;i++) //i代表计算组数
{
int sum=0,temp=0,j=0; //temp代表进位
scanf("%s%s",a,b);
la=strlen(a);
lb=strlen(b);
while(la > 0 || lb > 0)
{
sum = 0;
if(la-- > 0)
sum+=(a[la]-48);
if(lb-- > 0)
sum+=(b[lb]-48);
sum += temp;
c[j++]=sum%10;
temp=sum/10;
}
printf("Case %d:\n",i+1);
printf("%s + %s = ",a,b);
for(int m=j-1;m>=0;m--)
printf("%d",c[m]);
if(i!=num-1)
printf("\n\n");
}
system("pause");
}