大整数问题得求解 大整数的加法 计算2的n次方

大整数的加法
http://noi.openjudge.cn/ch0106/10/
模拟算术

#include<iostream>
#include<cstring>
#define maxn 10000
using namespace std;
int ans[maxn];
int main()
{
    char s1[maxn];
    char s2[maxn];
    cin>>s1>>s2;
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    int ptr = 0;//结果数组
    int carry = 0;//进位
    int i,j;
    //从最低位开始加
    for(i=len1-1,j=len2-1;i>=0||j>=0;i--,j--)//这里用或者的原因:两个都得算完才能出去
    {
        int x = carry;
        if(i>=0)//s1如果还有数
        {
            x+=s1[i]-'0';
        }
        if(j>=0)//s2如果还有数
        {
            x+=s2[j]-'0';
        }
        ans[ptr++]=x%10;
        carry = x/10;
    }
    //如果有最高位进位
    if(carry)
        ans[ptr++]= carry;
    int flag = 1;//处理一下特殊用例 00000+00000
    for(i=ptr-1;i>=0;i--)
    {
        //前导0不能输出
        if(!ans[i]&&flag){
            continue;
        }
        flag = 0;
        printf("%d",ans[i]);
    }
    //全是0的情况
    if(flag)
        printf("0\n");

    return 0;
}

计算2的n次方
http://noi.openjudge.cn/ch0106/12/

#include<iostream>
using namespace std;
int a[1010];
int main()
{
    int n,i;
    cin>>n;
    int l=1;//指向最高位的后一位
    a[0]=2;
    for(i=1;i<n;i++)
    {
        for(int j=0;j<l;j++)
            a[j]*=2;
        for(int j=0;j<l;j++)
        {
            a[j+1]+=a[j]/10;
            a[j] = a[j]%10;
        }
        //如果a[l]不等于零 说明进位了,l往后移动
        if(a[l]!=0)
            l++;
    }
    for(int j=l-1;j>=0;j--)
    {
        cout<<a[j];
    }
    cout<<endl;
    return 0;
}

求10000以内n的阶乘
http://noi.openjudge.cn/ch0106/14/

#include<iostream>
#define maxn 40010
using namespace std;
int result[maxn];
int main()
{
    int num;
    cin>>num;
    int index = 1;//最高位的位置
    result[0]=1;
    for(int i=1;i<=num;i++)
    {
        int carry=0;
        for(int j=0;j<index;j++)
        {
            int tmp = result[j]*i+carry;//i 1~~~num 很大 相乘得到carry会很大
            result[j] = tmp %10;
            carry = tmp/10;
        }
        //为什么要while处理 i 1~~~num 很大 相乘得到carry会很大,所以要用while处理一下
        while(carry)
        {
            result[index++] = carry%10;
            carry/=10;
        }
    }
    for(int i=index-1;i>=0;i--)
        cout<<result[i];
    cout<<endl;


    return 0;
}
    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/qq_36734025/article/details/80690807
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞