poj1503

来源:互联网 发布:淘宝微淘在哪里 编辑:程序博客网 时间:2024/05/17 07:33

摘要:

123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0

output:370370367037037036703703703670

基本思路很简单,就是简单的进位,注意最后一次进位要特殊处理.

(1)要特殊注意的几点[1]可能输入是最大的9999…9999(100个9),输入了100行时,最后的结果可能超过100位,最多可以是102位.

(2)注意当输入是00123开头的时候,必须要特殊处理.开头的0(这点难到了我很久,最后才确定可能是这个bug导致不能AC)

#include "stdafx.h"#include "iostream"#include "string.h"using namespace std;int main(){    int sum[104] = {0};    char add[101] = {'0'};    int a,b,c = 0;//c代表可能的进位    int length,top = 102,sumstart = 100;     while(1)    {        memset(add,0,sizeof(add));        cin >> add;        if(add[0] == '0'&&strlen(add)==1)            break;        length = strlen(add);        top = 102,c = 0;        while(length--)//进行新输入的计算        {            a = add[length] - ('0' - 0);             b = sum[top];            b = a + b + c;//b是和,c是可能的进位,a是新输入的加数            c = b>=10 ? 1:0;//确定b的进位            sum[top--] = b>=10?b%10:b;//和的存储是从第99位存储最后一位的,这样方便进位            if(b!=0)            sumstart = sumstart < top ? sumstart:top+1;//记录最后的位置        }        if (c>0)//如果存在最后的进位        {            sum[top--] += c;            sumstart = sumstart < top ? sumstart:top+1;//记录最后的位置        }    }     while(sumstart<=102)     {            cout<<sum[sumstart++];     }    return 0;}
0 0
原创粉丝点击