一、题目:一个大整数除以一个整数(低精度数)
输入一个大于0的大整数a,长度不超过100位,求出除以一个整数b,输出得到的商和余数。
输入: 2132104848488485 13
输出:164008065268345 0
二、思路:
1.输入大整数的数字串和整数b
用string存储大整数的数字串,用int存储整数b
2.将数字串从低位往高位存储到数组a中
3.利用竖式计算,c=a/b
(1)首先,另余数为x=0;
(2)让余数乘以10,和高位的第一个位置的数相加,然后除以b,得到此位置的商;
(3)求出此时的余数x;
(4)接着往高位的下一位走,重复(2)(3)步骤,直到最后一位;
4.输出商和余数
三、实现程序
// main.cpp
// highPrecision9:一个高精度数除以一个整数
// c = a / b
// Created by ChanJose on 2019/1/19.
// Copyright © 2019年 ChanJose. All rights reserved.
// 测试数据:
// 输入:
// 2132104848488485 13
// 输出:
// 164008065268345 0
#include <iostream>
#include <string>
using namespace std;
const int MAX = 101;
int main(int argc, const char * argv[]) {
int b, i, la, lc, x;
string str;
int a[MAX], c[MAX];
while(cin >> str >> b) { // 1.输入大整数和整数b
memset(a, 0, sizeof(a)); // 清零
memset(c, 0, sizeof(c));
// 获取大整数的长度
la = (int)str.size();
for(i = 0; i < la; i++)
a[la-i-1] = str[i] - '0'; // 2.将数字串从低位往高位存储到数组a中
// 3.计算c=a/b
x = 0; // 余数初始为0
for(i = la-1; i >= 0; i--) {
c[i] = (x * 10 + a[i]) / b; // 将高位得到的余数乘以10,再加上新位置的数,再除以b
x = (x * 10 + a[i]) % b; // 得出余数
}
lc = la;
while(lc > 1 && c[lc-1] == 0) // 4.删去多余的0
lc--;
// 5.从高位往低位输出商
for(i = 0; i < lc; i++)
cout << c[lc-i-1];
// 空格输出余数
cout << " " << x << endl;
}
return 0;
}测试结果:

版权声明:本文为chuanzhouxiao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。