69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#define max(a,b) a>b?a:b
struct Num
{
int len,back;
char num[800];
}A,B;
void swap(char &a,char &b)
{
a ^= b;
b ^= a;
a ^= b;
}
void Init(Num &c)
{
c.len = strlen(c.num);
char *p = strchr(c.num,'.');
if(p == NULL)
{
c.num[c.len++]='.';
c.num[c.len++]='0';
c.back = 1;
}
else
{
int point_loc = p - c.num;
for(int i=c.len-1;i>=point_loc+2;i--)
{
if(c.num[i] != '0')
break;
c.len--;
}
c.back = c.len - 1 - point_loc;
}
}
void Reverse(Num &c)
{
for(int i=0;i<c.len-1-i;i++)
swap(c.num[i],c.num[c.len-1-i]);
}
void add(Num &a,Num &b)
{
Reverse(a);
int sub = a.back - b.back;
int max_loc = max(sub+b.len,a.len);
memset(a.num + a.len, '0', max_loc - a.len + 1);
for(int i = sub;i < max_loc ;i++)
{
if(a.num[i]=='.')
continue;
int loc_b = b.len-1 - (i-sub);
if(loc_b >= 0)
a.num[i] += b.num[loc_b] - '0';
if(a.num[i] > '9')
{
a.num[i+1]=='.' ? a.num[i+2]++ : a.num[i+1]++;
a.num[i] -= 10;
}
}
int min_loc;
for( min_loc=0; a.num[min_loc]=='0'; min_loc++);
max_loc = a.num[max_loc]=='0' ? max_loc-1 : max_loc;
min_loc = a.num[min_loc]=='.' ? min_loc+1 : min_loc;
for(int i= max_loc;i >= min_loc;i--)
putchar(a.num[i]);
printf("\n");
}[
int main()
{
while(~scanf("%s%s",A.num,B.num))
{
Init(A);
Init(B);
A.back > B.back ? add(A,B) : add(B,A);
}
return 0;
}
void add(Num &a,Num &b)
{
Reverse(a);
int sub = a.back - b.back;
int max_loc = max(sub+b.len,a.len);
memset(a.num + a.len, '0', max_loc - a.len + 1);
for(int i = sub;i < max_loc ;i++)
{
if(a.num[i]=='.')
continue;
int loc_b = b.len-1 - (i-sub);
if(loc_b >= 0)
a.num[i] += b.num[loc_b] - '0';
if(a.num[i] > '9')
{
a.num[i+1]=='.' ? a.num[i+2]++ : a.num[i+1]++;
a.num[i] -= 10;
}
}
int min_loc;
for( min_loc=0; a.num[min_loc]=='0'; min_loc++);
max_loc = a.num[max_loc]=='0' ? max_loc-1 : max_loc;
min_loc = a.num[min_loc]=='.' ? min_loc+1 : min_loc;
for(int i= max_loc;i >= min_loc;i--)
putchar(a.num[i]);
printf("\n");
}
#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