1632. 光盘神的运算

本题简单考察了字符串以及高精度除法(高 除以 低)的相关内容,只要掌握相关知识,便能很快做出。

不过还是有要注意的地方: 1.X 要使用 unsigned long long int 类型,因为 long long 范围 大概是±10的18次方. 2.数组不能开的过小 3.补充到注释里面了

下面是源代码(高精度的部分是以前用C写的)

#include <bits/stdc++.h> using namespace std; string s,o; int num1[100010],num[100010]; void F (string str,unsigned long long int num2); int main () { int t = 0; unsigned long long int X = 0; cin >> t; while ( t-- ) { cin >> o; s+=o; } cin >> X; F(s,X); return 0; } void F (string str,unsigned long long int num2) { unsigned long long int i=0,j=0,k=0,l=0,len=0,yu=0,len1=0; len=str.length();//保存 字符串 的长度 for (i = 0;i < len; i++) num1[i] = str[i] - '0';//将字符转换为数字,便于计算 for (j = 0;j < len; j++) { num[j] = (yu*10+num1[j]) / num2; yu = (yu*10 + num1[j]) % num2; } /*此过程类似于草稿值上四则运算的步骤(不理解的可以自己在草稿值上一步一步地算一算)*/ while (num[len1] == 0 && len1 < len) len1++;//去除 结果 前的0 //有需要的话要判断 结果 是否为0 if (len == 1&&num[0] == 0) printf ("0"); else { for (k = len1;k < len; k++) printf("%d",num[k]); } printf (" %llu",yu); return; }