当前位置: 移动技术网 > 移动技术>移动开发>IOS > 高精度--模板

高精度--模板

2020年07月09日  | 移动技术网移动技术  | 我要评论

加法

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1000
int main(void)
{
   char str[MAXN];
   int arr1[MAXN],arr2[MAXN],len,len1,len2,i,j;
    scanf("%s",str);
    len1=strlen(str);
    for(i=0;i<len1;i++)//字符串倒叙导入数组,方便从低位开始运算
        arr1[i]=str[len1-1-i]-'0';
    scanf("%s",str);
    len2=strlen(str);
    for(i=0;i<len2;i++)
        arr2[i]=str[len2-1-i]-'0';//字符串中的是字符,要转换成数字
    len=(len1>len2)?len1:len2;
    for(i=0;i<len;i++)
    {
        j=(arr1[i]+arr2[i])/10;
        arr1[i+1]+=j;//进位
        arr1[i]=(arr1[i]+arr2[i])%10;//保留
    }
    if(j)len++;//最后一位是否进位
    for(i=0;i<len;i++)
        printf("%d",arr1[len-1-i]);
    return 0;
}
 
/**************************************************************
    Problem: 3580
    User: 2019UPC110
    Language: C++
    Result: 正确
    Time:1 ms
    Memory:2024 kb
****************************************************************/

减法

#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")

//std::ios::sync_with_stdio(false);
//std::cin.tie(0);

using namespace std;
int a[210],b[210],c[210],lena,lenb,lenc,i;
char n[210],n1[210],n2[210];
int main()
{
    scanf("%s",n1);
    scanf("%s",n2);
    if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))
    {
        strcpy(n,n1);
        strcpy(n1,n2);
        strcpy(n2,n);
        cout<<"-";
    }
    lena=strlen(n1);lenb=strlen(n2);
    for(i=0;i<=lena-1;i++)a[lena-i]=int(n1[i]-'0');
    for(i=0;i<=lenb-1;i++)b[lenb-i]=int(n2[i]-'0');
    i=1;
    while(i<=lena||i<=lenb)
    {
        if(a[i]<b[i])
        {
            a[i]+=10;
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
        i++;
    }
    lenc=i;
    while((c[lenc]==0)&&(lenc>1))lenc--;
    for(i=lenc;i>=1;i--)cout<<c[i];
    cout<<endl;
    return 0;
}

乘法写的好hh

#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")

//std::ios::sync_with_stdio(false);
//std::cin.tie(0);
int main(){
    string a,b;
    int an[105]={0},bn[105]={0},c[15000]={0};
    cin>>a>>b;
    int lena=a.length();
    int lenb=b.length();
    //倒序存储两个数于整型数组中
    for(int i=0;i<lena;i++){
        an[lena-i-1]=a[i]-'0';
    }

    for(int i=0;i<lenb;i++){
        bn[lenb-i-1]=b[i]-'0';
    }
    //进行乘法运算,结果存于c[]
    for(int i=0;i<lenb;i++){
        for(int j=0;j<lena;j++){
            c[i+j]+=an[j]*bn[i];
            c[i+j+1]+=c[i+j]/10;
            c[i+j]%=10;
        }
    }
   int  lenc=lena+lenb;
    //删除结果高位的前缀0
    while(c[lenc-1]==0  && lenc>1){
        lenc--;
    }
    //将结果倒序输出
    for(int i=lenc-1;i>=0;i--){
        cout<<c[i];
    }
    cout<<endl;
    return 0;
}

 

本文地址:https://blog.csdn.net/QXK_Jack/article/details/107159642

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网