HDU1047 - Integer Inquiry (大数加法)

来源:互联网 发布:photozoom pro mac 编辑:程序博客网 时间:2024/06/05 16:32

题目链接

  • 思路
  • 代码

思路

大数加法,这道题的格式一直没控制好,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;}
0 0