Problem 2089 数字游戏
Accept: 348 Submit: 898
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
现在,给你2个整形数字A和B。你的任务就是计算出A+B的结果C后,统计C中数字5出现的次数。
Input
输入数据第一行包含一个整数T,表示测试数据的组数。对于每组测试数据:
输入两个整数a,b(-2*10^9<a,b<2*10^9)。两个数字之间用空格隔开。
Output
对于每组测试数据,输出一行,包含一个整数,表示数字5出现的次数。
Sample Input
24 533 22
Sample Output
02
Source
福州大学第九届程序设计竞赛字符串模拟大数相加就是了!!!!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int bigadd(char a[],char b[],int sum[])
{
int lena,lenb,lens,i;
char m[100004],n[100004];
memset(m,'\0',sizeof(m));
memset(n,'\0',sizeof(n));
lena=strlen(a);
lenb=strlen(b);
lens=(lena>lenb)?lena:lenb;
int c=0;
for(i=0;i<lena;i++)
{
m[i]=a[lena-i-1]-48;
}
m[lena]='\0';
for(i=0;i<lenb;i++)
{
n[i]=b[lenb-i-1]-'0';
}
n[lenb]='\0';
for(i=0;i<lena||i<lenb;i++)
{
sum[i]=(m[i]+n[i]+c)%10;
c=(m[i]+n[i]+c)/10;
sum[i+1]=c;
}
if(c)
{
lens++;
}
return lens;
}
int main()
{
int c,i,j,k,t;
char a[100004],b[100005];
int sum[100004];
scanf("%d",&c);
for(t=1;t<=c;t++)
{
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
memset(sum,'\0',sizeof(sum));
scanf("%s",a);
scanf("%s",b);
k=bigadd(a,b,sum);
int count=0;
for(i=0;i<k;i++)
{
if(sum[i]==5)
{
count++;
}
}
printf("%d\n",count);
}
}