C++高精度


高精度加法

題目描述

輸入兩個大整數a,b,輸出他們的和。(1<=a,b<=10的100次方)

輸入

輸入兩個大整數a和b。

輸出

輸入a加b的和。

樣例輸入

43434343445435343  32435647668754353

樣例輸出

75869991114189696

程序+注釋

#include <bits/stdc++.h>
using namespace std;
char al[100],bl[100]; 
int a[100],b[100],c[100];
int main()
{
	scanf("%s",al);//不能用gets 
	scanf("%s",bl);//因為這兩個數之間只有一個空格 
	int lena,lenb,lenc,x = 0;//x代表進位
	lena = strlen(al);//lena是al數組的長度 
	lenb = strlen(bl);//lenb是bl數組的長度 
	for (int i = 0;i <= lena - 1;i ++)//把這個數字反着存儲 al里的123就是a里面的321 
		a[lena - i] = al[i] - '0';
	for (int i = 0;i <= lenb - 1;i ++)//這個也是 
		b[lenb - i] = bl[i] - '0';
	lenc = 1;//循環變量 
	while ((lenc <= lena) || (lenc <= lenb))//循環直到lenc等於al或者bl的長度 
	{
		c[lenc] = a[lenc] + b[lenc] + x;//(核心)把這兩個數字加起來,並且加上進位 
		x = c[lenc] / 10;//如果兩個數加起來大於10,x就是1,否則取余的結果就是 0 
		c[lenc] = c[lenc] % 10;// 
		lenc ++;//自增 1  
	}
	c[lenc] = x;/*把最后一位進位過來*/ 
	while (c[lenc] == 0)//如果最后一位為零 
	{
		lenc --;//把最后一位不輸出  
	}
	for (int i = lenc;i >= 1;i --)//輸出 
	{
		cout << c[i];
	}
	cout << endl;//回車 
	return 0;
}

高精度減法

題目描述

輸入兩個大整數a,b,輸出他們的差。(1<=a,b<=10的100次方)

輸入

輸入兩個大整數a和b。

輸出

輸入a減b的差。

樣例輸入

35 45

樣例輸出

-10

程序+注釋

#include <bits/stdc++.h>
using namespace std;
char s1[1000],s2[1000];
int a[1000],b[1000],c[1000];
int main()
{
	char n[1000];
	scanf("%s %s",s1,s2);//也不能用gets 
	if (strlen(s1) < strlen(s2) || strlen(s1) == strlen(s2) && strcmp(s1,s1) < 0)// 如果減數 大於 被減數 
	{
		strcpy(n,s1);strcpy(s1,s2);strcpy(s2,n);//把s1 和 s2 交換 
		printf("-");//打印出“- ” 這個符號 
	}
	int len1 = strlen(s1);//s1 的長度  
	int len2 = strlen(s2);//s2 的長度 
	for (int i = len1 - 1;i >= 0;i --)//反着存儲 
	{
		a[len1 - (i + 1) + 1] = s1[i] - '0';
	}
	for (int i = len2 - 1;i >= 0;i --)//反着存儲 
	{
		b[len2 - (i + 1) + 1] = s2[i] - '0';
	}
	for (int i = 1;i <= len1;i ++)
	{
		a[i] = a[i] - b[i];//標准減法,把 a[i] - b[i] 的結果存在 a[i] 里面 
		if (a[i] < 0)//退位  
		{
			a[i] = a[i] + 10; 
			a[i + 1] --; //后面的一位自減1 
		}
	}
	while (a[len1] == 0)//如果最后一位為零 
	{
		len1 --;//把最后一位不輸出 
	} 
	for (int i = len1;i >= 1;i --)//輸出 
	{
		printf ("%d",a[i]);//輸出 
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM