C++高精度计算二(练习题)

📅 2026/6/18 14:38:53
C++高精度计算二(练习题)
数位和计算【描述】输入一个大数将该大数中的各位数字之和相加输出【输入描述】一个大数A【输出描述】计算各位数字之和然后输出结果【样例输入】123456789【样例输出】45#includeiostream#includecstringusingnamespacestd;constintMAX1005;chara[MAX];intdigitSum(){intsum0;for(inti0;a[i];i){suma[i]-0;}returnsum;}intmain(){cina;coutdigitSum()endl;return0;}/* 【输入用例2】 1000000000000000000000 【输出用例2】 1 【输入用例3】 9999999999999999999999999999999 【输出用例3】 279 【输入用例4】 00000000000000000000000007 【输出用例4】 7 【输入用例5】 2025 【输出用例5】 9 【输入用例6】 1111111111111111111111111111 【输出用例6】 28 */连续除法【描述】设计一个程序能够计算一个大数连续除于n个数的结果需要注意的是除的过程中可能会出现小数部分所以每次除的结果只保留整数部分舍去小数部分即可。【输入描述】第一行大数A第二行除数个数n接下来n行n个除数【输出描述】连续除完后的结果【输入样例】100032 5 10【输出样例】10#includeiostream#includestringusingnamespacestd;// 高精度除以单精度函数处理字符串形式的大数stringdivideString(conststringdividend,intdivisor){string quotient;intremainder0;for(charc:dividend){intcurrentremainder*10(c-0);// 当前余数拼接当前位quotient(current/divisor)0;// 计算商位remaindercurrent%divisor;// 更新余数}// 去除前导零size_t startquotient.find_first_not_of(0);return(startstring::npos)?0:quotient.substr(start);}intmain(){string A;intn;// 输入处理cinAn;for(inti0;in;i){intdivisor;cindivisor;// 连续除法处理AdivideString(A,divisor);if(A0)break;// 提前终止优化}coutAendl;return0;}/* 【输入用例2】 5 1 1 【输出用例2】 5 【输入用例3】 100 2 10 10 【输出用例3】 1 【输入用例4】 0 1 5 【输出用例4】 0 【输入用例5】 2560144019201080 10 2 2 2 2 2 2 2 2 2 2 【输出用例5】 2500140643751 【输入用例6】 9999999999999999999999 9 9 9 9 9 9 9 9 9 9 【输出用例6】 25811747917131 */数的次方【描述】计任意给定一个正整数 n (n100) 计算 2的n次方的值。【输入】输入一个正整数 n。【输出】输出2的 n 次方的值。【输入样例1】5【输出样例1】32【输入样例2】100【输出样例2】1267650600228229401496703205376#includeiostreamusingnamespacestd;#defineMAXN160inta[MAXN]{0};intn;intmain(){cinn;a[0]1;for(inti1;in;i){intup0;// 进位初始为0for(intj0;jMAXN;j){// 从个位到最高位处理进位intta[j]*2up;// 逐位*2 进位a[j]t%10;// 保存个位upt/10;// 留下进位部分}}intiMAXN-1;while(a[i]0)// 去前导0i--;while(i0)// 输出商couta[i--];return0;}/* 【输入用例2】 20 【输出用例2】 1048576 【输入用例3】 50 【输出用例3】 1125899906842624 【输入用例4】 80 【输出用例4】 1208925819614629174706176 【输入用例5】 120 【输出用例5】 1329227995784915872903807060280344576 【输入用例6】 150 【输出用例6】 1427247692705959881058285969449495136382746624 */大数进制转换【描述】输入一个10进制大数将它转换成对应的进制表示【输入描述】输入为两个数第一个数是需要转换的大数第二个数是需要转换的进制进制要求在2-16之间【输出描述】输出转换后的进制表示数【样例输入】1024 2【样例输出】10000000000#includeiostream#includecstringusingnamespacestd;// 定义最大输入长度含符号位constintMAX1005;charnum[MAX],res[MAX];// num存储输入数字res存储转换结果intbase;// 目标进制chardigits[]0123456789ABCDEF;// 将十进制字符串转换为指定进制并输出voidconvert(){intlenstrlen(num);longlongdecimal0;// 中间十进制值// 将输入字符串转换为十进制数值for(inti0;ilen;i){decimaldecimal*10(num[i]-0);// 逐位计算十进制值}intindex0;// 结果数组索引// 将十进制值转换为目标进制while(decimal0){res[index]digits[decimal%base];// 根据余数选择字符decimal/base;// 整除更新值}res[index]\0;// 字符串结束符// 逆序输出结果因转换时低位在前for(intiindex-1;i0;i--)coutres[i];coutendl;}intmain(){cinnumbase;// 输入数字字符串和目标进制convert();// 执行转换return0;}/* 【输入用例2】 1024 16 【输出用例2】 400 【输入用例3】 999999 2 【输出用例3】 11110100001000111111 【输入用例4】 99999999 8 【输出用例4】 575360377 【输入用例5】 255 16 【输出用例5】 FF 【输入用例6】 2025202420232022 16 【输出用例6】 731E92EDB2F56 */