您的位置:首页 > 产品设计 > UI/UE

HDU1047 - Integer Inquiry (大数加法)

2015-09-06 17:06 489 查看
题目链接

思路

代码

思路

大数加法,这道题的格式一直没控制好,PE了好长时间。

代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

char ans[110];
char num[110];

void reverse(char *str)
{
int len = strlen(str);
for(int i=0; i<len/2; i++)
swap(str[i], str[len-i-1]);
}

void add(char *str, char *num)
{
int i=0, temp=0;
for( ; str[i]&&num[i]; i++)
{
temp = str[i] + num[i] - '0' * 2 + temp;
str[i] = (temp%10) + '0';
temp /= 10;
}

if(!num[i]&&!str[i]&&temp) str[i] = temp + '0';
else if(!num[i])
{
for(; str[i]; i++)
{
temp = str[i] - '0' + temp;
str[i] = (temp%10) + '0';
temp /= 10;
}
if(temp) str[i] = temp + '0';
}
else
{
for(; num[i]; i++)
{
temp = num[i] - '0' + temp;
str[i] = (temp%10) + '0';
temp /= 10;
}
if(temp) str[i] = temp + '0';
}
}

void print(char *str)
{
reverse(str);
for(int i=0; str[i]; i++) printf("%c", str[i]);
printf("\n");
}

int main()
{
int t;
bool first = true;

scanf("%d", &t);
while(t--)
{
if(first) first = false;
else printf("\n");

memset(ans, 0, sizeof(ans));
while(true)
{
scanf("%s", num);
if(num[0]=='0') break;
reverse(num);
add(ans, num);
}
if(ans[0]=='\0') printf("0\n");
else print(ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: