zoukankan      html  css  js  c++  java
  • poj3982~1503大数问题

    poj3982
    数列A满足An = An-1 + An-2 + An-3, n >= 3

    编写程序,给定A0, A1 和 A2, 计算A99

    Input

    输入包含多行数据

    每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
    数据以EOF结束

    Output

    对于输入的每一行输出A99的值

    Sample Input

    1 1 1

    Sample Output

    69087442470169316923566147
    #include <iostream>
    #include
    <string>
    using namespace std;
    #define SIZE 105
    string s1[SIZE];
    string s;
    int sum[SIZE]={0};
    string add(string s1,string s2,string s3)
    {
    int i,j;
    for(i=0;i<SIZE;i++)
    sum[i]
    =0;//清零
    for(j=SIZE-1,i=s1.size()-1;i>=0;--i)//加s1
    sum[j--]+=(s1[i]-'0');

    for(j=SIZE-1,i=s2.size()-1;i>=0;--i)//加s2
    sum[j--]+=(s2[i]-'0');

    for(j=SIZE-1,i=s3.size()-1;i>=0;--i)//加s3
    sum[j--]+=(s3[i]-'0');

    j
    =0;//处理时去除前面的零
    while(!sum[j])
    ++j;
    for(i=SIZE-1;i>=j;i--)//处理进位
    {
    sum[i
    -1]+=sum[i]/10;
    sum[i]
    =sum[i]%10;
    }

    i
    =0;//输出前去除前面的零
    while(!sum[i])
    ++i;
    i
    ++;
    int k=i;
    string t(SIZE-i+1,'0');
    for(;i<=SIZE;i++)
    t[i
    -k]=sum[i-1]+'0';
    return t;
    }
    int main()
    {
    int i;
    while(cin>>s1[0]&&s1[0].compare("EOF"))//while(scanf("%s%s%s",s1[0],s1[1],s1[2])!=EOF)
    { cin>>s1[1]>>s1[2];
    for(i=0;i<97;i++)
    s1[i
    +3]=add(s1[i],s1[i+1],s1[i+2]);
    cout
    <<s1[99]<<endl;
    }
    return 0;
    }


    poj1503

    Sample Input

    123456789012345678901234567890
    123456789012345678901234567890
    123456789012345678901234567890
    0

    Sample Output

    370370367037037036703703703670
    #include <iostream>
    #include
    <string>
    using namespace std;
    #define SIZE 105
    string s;
    int sum[SIZE]={0};
    int main()
    {
    int i,j;
    while(cin>>s&&s.compare("0"))
    {

    for(j=SIZE-1,i=s.size()-1;i>=0;--i)
    sum[j
    --]+=(s[i]-'0');
    }
    j
    =0;//处理时去除前面的零
    while(!sum[j])
    ++j;

    if(j>=SIZE)
    printf(
    "0");
    for(i=SIZE-1;i>=j;i--)//处理进位
    {
    sum[i
    -1]+=sum[i]/10;
    sum[i]
    =sum[i]%10;
    }

    i
    =0;//输出前去除前面的零
    while(!sum[i])
    ++i;

    for(;i<SIZE;i++)
    cout
    <<sum[i];
    cout
    <<endl;
    }
  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2131988.html
Copyright © 2011-2022 走看看