首页 > 其他分享 >高精度

高精度

时间:2023-04-30 22:12:05浏览次数:28  
标签:return 高精度 int back -- ans size

高精度减法

#include <bits/stdc++.h>

using namespace std;



bool cmp(vector<int>a, vector<int>b)
{
    if(a.size() != b.size())    return a.size() > b.size();
    for(int i = a.size() - 1; i >= 0; -- i)
        if(a[i] != b[i])    return a[i] > b[i];
    return true;
}

vector<int> sub(vector<int>a, vector<int>b)
{
    vector<int>ans;
    for(int i = 0, t = 0; i < a.size(); ++ i)
    {
        t = a[i] - t;
        if(b.size() - 1 >= i)   t -= b[i];
        ans.push_back((t + 10) % 10);
        if(t < 0) t = 1;
        else t = 0;
    }
    while(ans.size() != 1 && ans.back() == 0)   ans.pop_back();
    return ans;
}

void run()
{
	int n;
	string A, B;
	vector<int>a, b, c;
	cin >> n;
	cin >> A;
    for(int i = A.size() - 1; i >= 0; -- i) a.push_back(A[i] - '0');
    for(int i = n - 1; i >= 0; -- i) b.push_back(9);
    for(int i = n; i >= 0; -- i)	c.push_back(1);
    vector<int> ans1 = sub(b, a);
	vector<int> ans2 = sub(c, a);
	if(ans1.size() == n)
	{
		for(int i = ans1.size() - 1; i >= 0; -- i)	cout << ans1[i];
		cout << endl;
		return;
	}
	for(int i = ans2.size() - 1; i >= 0; -- i)	cout << ans2[i];
	cout << endl;
}

int main()
{
//	freopen("1.in", "r", stdin);
	int t;cin >> t;
	while(t --)	run();
	return 0;
    
}

标签:return,高精度,int,back,--,ans,size
From: https://www.cnblogs.com/cxy8/p/17365851.html

相关文章

  • 高精度乘多位低精度
    【题目描述】输入高精度数字a,再输入多位低精度数字b,计算a*b的乘积。【输入】略【输出】略#include<iostream>#include<cstring>usingnamespacestd;intmain(){chara[201];inta2[201]={},n,c[402]={};cin>>a>>n;intlena=......
  • 高精度数相加乘一位数
    【问题描述】请编程实现,输入两个高精度数,输出它们的和的n倍。(1<=n<=9),注意:这两个高精度数的位数不一定相同且有可能产生进位。【输入输出描述】输入: 两行,第一行为高精度数a,第二行为高精度数b。输出: 一行,一个高精度数c,表示a与b的和的n倍。【样例......
  • 高精度乘一位整数
    求高精度数的n倍【问题描述】定义一个高精度数a,输出a的n(0<=n<=9)倍的值。a的长度不超过200.【输入输出描述】输入:两行,第一行为高精度数a,第二行为倍数n;输出:a的n倍的值【样例输入】122344445556667773【样例输出】36703333667000331#include<iost......
  • 高精度四则及GCD运算(二元均是高精度)
    原代码出处,转自HDAWN,经过部分改写,包装为结构体,常数比较大.测试输出大概实际操作具体支持四则运算及GCD运算,重写了istream和ostream和比较运算符.构造函数既可以longlong,string,也可以char[]如果除法要求余数,a/b=c,a-b*c=res,除了这样绕一......
  • 高精度模板 大数减大数 可变数组vector实现
    vector<int>Sub(vector<int>&A,vector<int>&B)//这里默认长数减去短数{vector<int>C;//结果向量intT=0;//上一位借位标志位for(inti=0;i<A.size();i++){T=A[i]-T;if(i<B.size())T-=B[i];//检......
  • 高精度模板 整数大数除以小整数数
    vector<int>Div(vector<int>&A,int&B){vector<int>C;intT=0;//除数for(inti=A.size()-1;i>=0;i--)//注意,除法模拟是从最高位开始的{T=T*10+A[i];//更新除数C.push_back(T/B);T%=B;......
  • c如何输出高精度浮点型数
    环境:cygwin64的gcc (mingw64的gcc不行)intmain(intargc,charconst*argv[]){longdoubleld=1.23L;printf("1%Lf\n",ld);doubled=1.3456789123;printf("2%f\n",d);printf("3%lf\n",d);printf("4%ll......
  • Java中处理高精度数据计算
    1、为什么要使用高精度计算拿整数举例:在Java中,int和long是两种基本数据类型,而BigInteger是一个对象类型。它们的取值范围如下:-int:32位有符号整数,取值范围为-2^31~2^31-1(即-2147483648~2147483647)。-long:64位有符号整数,取值范围为-2^63~2^63-1(即-9223......
  • w2-4 高精度减法
    #include<iostream>#include<string>usingnamespacestd;intsum[50000];intmain(){stringa,b;longlongx,y;cin>>a>>b;intjug=0,pd=0;if((a<b&&a.size()==b.size())||a.size()<b.siz......
  • 高精度加法、减法、乘法【自存】
    预处理intMax_len;//最多可能的位数stringa,b;voidinit(){cin>>a>>b;Max_len=500;//intind=Max_len,i=a.size()-1;while(i>=0){ans[ind]=a[i]-'0';ind--;i--;}in......