C++高精度运算(加减乘除)
创始人
2024-05-13 00:34:27
0

C++中在int 是32位bit是2^32-1。

C/C++基础数字类型的取值范围
类型    取值范围    位数
unsigned   int    0~4294967295    10位
int    2147483648~2147483647    10位
unsigned long    0~4294967295    10位
long    2147483648~2147483647    10位
long long    -9223372036854775808~9223372036854775807    19位
unsigned long long    0~1844674407370955161    19位
__int64    -9223372036854775808~9223372036854775807    19位
unsigned __int64    0~18446744073709551615    20位

用高精度可以计算的更大。

下面是加法运算:

#define _CRT_SECURE_NO_WARNINGS 1	
#include
#include
#include
using namespace std;
const int N = 100005;
int A[N], B[N], C[N];
int la, lb, lc;
void add(int A[], int B[], int C[]) {for (int i = 0; i < lc; i++) {C[i] += A[i] + B[i]; //累加C[i + 1] += C[i] / 10; // 进位C[i] %= 10; //存余数}if (C[lc]) lc++; // 注意最高位的处理 lc是位长
}
int main() {string a, b;cin >> a >> b;la = a.size(), lb = b.size(), lc = max(la, lb); // 这里是取最高位for (int i = la - 1; ~i; i--) A[la - 1 - i] = a[i] - '0';for (int i = lb - 1; ~i; i--) B[lb - 1 - i] = b[i] - '0';add(A, B, C);for (int i = lc - 1; ~i; i--) printf("%d", C[i]);return 0;
}

减法运算:

注意要用大数减小数,如果是小数减大数要加负号.在减的时候要用while确定不为0的位。

在主函数中要注意for不需要减一。

#define _CRT_SECURE_NO_WARNINGS 1	
#include
#include
#include
using namespace std;
const int N = 100005;
int A[N], B[N], C[N];
int la, lb, lc;
bool cmp(int A[], int B[]) {if (la != lb) return la > lb;for (int i = la - 1; ~i; i--) {if (A[i] != B[i]) return A[i] > B[i];}return true;
}
void sub(int A[], int B[], int C[]) {for (int i = 0; i < lc; i++) {if (A[i] < B[i]) {A[i + 1]--, A[i] += 10;}C[i] = A[i] - B[i];}while (lc && C[lc] == 0) lc--;
}
int main() {string a, b;cin >> a >> b;la = a.size(), lb = b.size(), lc = max(la, lb); // 这里是取最高位for (int i = la - 1; ~i; i--) A[la - 1 - i] = a[i] - '0';for (int i = lb - 1; ~i; i--) B[lb - 1 - i] = b[i] - '0';if (!cmp(A, B)) swap(A, B), cout << "-";sub(A, B, C);for (int i = lc ; ~i; i--) printf("%d", C[i]);return 0;
}

乘法运算:

#define _CRT_SECURE_NO_WARNINGS 1	
#include
#include
#include
using namespace std;
const int N = 100005;
int A[N], B[N], C[N];
int la, lb, lc;
void mul(int A[], int B[], int C[]) {for (int i = 0; i < la; i++) {for (int j = 0; j < lb; j++) {C[i + j] += A[i] * B[j]; // 这里要注意是加C[i + j + 1] += C[i + j] / 10;C[i + j] = C[i + j] % 10;}}while (lc && C[lc] == 0) lc--;
}
int main() {string a, b;cin >> a >> b;la = a.size(), lb = b.size(), lc = la+lb; // 这里是取最高位for (int i = la - 1; ~i; i--) A[la - 1 - i] = a[i] - '0';for (int i = lb - 1; ~i; i--) B[lb - 1 - i] = b[i] - '0';mul(A, B, C);for (int i = lc; ~i; i--)printf("%d", C[i]);return 0;
}

除法运算:

#define _CRT_SECURE_NO_WARNINGS 1	
#include
#include
#include
using namespace std;
const int N = 100005;
int A[N], B[N], C[N];
int la, lb, lc;
void mul(int A[], int B[], int C[]) {for (int i = 0; i < la; i++) {for (int j = 0; j < lb; j++) {C[i + j] += A[i] * B[j]; // 这里要注意是加C[i + j + 1] += C[i + j] / 10;C[i + j] = C[i + j] % 10;}}while (lc && C[lc] == 0) lc--;
}void div(int A[], int b, int C[]) {long long r = 0;for (int i = la - 1; ~i; i--) {r = r * 10 + A[i];C[la - 1 - i] = r / b; //从后向前r %= b;}reverse(C, C + lc);while (lc && C[lc] == 0) lc--;
}int main() {string a;int b;cin >> a >> b;la = a.size(),  lc = la; // 这里是取最高位for (int i = la - 1; ~i; i--) A[la - 1 - i] = a[i] - '0';//for (int i = lb - 1; ~i; i--) B[lb - 1 - i] = b[i] - '0';//mul(A, B, C);div(A, b, C);for (int i = lc; ~i; i--)printf("%d", C[i]);return 0;
}

相关内容

热门资讯

伊朗外长:伊美第三轮会谈将于2...   新华社德黑兰4月19日电(记者陈霄 沙达提)伊朗伊斯兰共和国通讯社19日报道,伊朗外长阿拉格齐当...
完善竞业限制保障劳动者合法权益 转自:法治日报□ 尹诗雅 刘智铭  2025年《政府工作报告》强调支持劳动密集型产业吸纳和稳定就业,...
二向箔能打败三维生命吗? 二向箔能打败三维生命吗? 二向箔将太阳系从三维空间变成只有“长宽”两个维度,而“厚度”为零的二维空间...
美国最高法院叫停政府驱逐委籍人... 转自:央视新闻△资料图  美国最高法院当地时间19日下令,联邦政府必须暂停驱逐当前关押在得克萨斯州北...
看图猜字! 看图猜字!每个字里面都看到了酒,应该就是“酒”
特斯拉据悉推迟在美量产平价版M... 财联社4月20日讯(编辑 夏军雄)据媒体援引消息人士报道,特斯拉推迟了在美国制造平价版Model Y...
惠民演出进万家 吴勇 黄秭轩 王柯潞 摄(一师三团)
鹰眼预警:南兴股份营业收入下降 Hehson财经上市公司研究院|财报鹰眼预警4月19日,南兴股份发布2024年年度报告,审计意见为标...
美国又一小飞机坠毁 机上载有4... 当地时间4月19日,央视记者获悉,美国伊利诺伊州警方当天上午接到一起小型单引擎飞机坠毁的报告。美国联...
鹰眼预警:*ST嘉寓营业收入大... Hehson财经上市公司研究院|财报鹰眼预警4月19日,*ST嘉寓发布2024年年度报告,审计意见为...
工厂“黑科技”背后的产业新变迁 ●新华社记者 张辛欣 周圆 实体经济的“烟火气”在企业,企业的活力看生产线。 当机器...
兵团七人入选乡村文化和旅游带头... 本报乌鲁木齐讯(全媒体记者 马雪娇 实习生 赵冰冰) 近日,文化和旅游部办公厅发布2024年...
鹰眼预警:三川智慧营业收入大幅... Hehson财经上市公司研究院|财报鹰眼预警4月19日,三川智慧发布2024年年度报告,审计意见为标...
鹰眼预警:乐普医疗营业收入下降 Hehson财经上市公司研究院|财报鹰眼预警4月19日,乐普医疗发布2024年年度报告,审计意见为标...
鹰眼预警:冀凯股份应收账款增速... Hehson财经上市公司研究院|财报鹰眼预警4月19日,冀凯股份(维权)发布2024年年度报告,审计...
如何促进民营经济发展壮大 编者按 民营经济是推进中国式现代化的生力军,也是高质量发展的重要基础。中央经济工作会议指出,“...
兵团“2025年青年普法志愿者... 本报石河子讯(全媒体记者 史进) 4月17日,由兵团法学会、司法局、团委联合举办的兵团“2025...
以军恢复军事行动来首名以士兵在... 当地时间19日晚间,以色列国防军证实,当天早些时候,以军部队在加沙地带北部的拜特哈嫩遭巴勒斯坦伊斯兰...
共建宜居美好家园,看看他们怎么... ●谢国庆  张乐  谭新文  周情  李振蒙  陈健生  王璐璐  张刘武编者按春风拂绿万象新,环境...