高精度模板
模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| vector<int> div(vector<int> &A,int b,int &r){ vector<int> C; r = 0; for(int i = A.size() - 1; i>=0; i-- ){ r = r*10 + A[i]; C.push_back(r / b); r %= b; } reverse(C.begin(),C.end()); while(C.size() > 1 && C.back() == 0) C.pop_back(); return C; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| void div(int len,int num){ int i; for(i = 0; i < len; i++) s1[i] = s1[i] - '0'; for(i = 0; i<len; i++){ r = r*10 + s1[i]; a[i] = r/num; r %= num; }
while(!a[i]) i--; if(i<0) printf("0"); for(i=0; i<len;i++) { if(a[i]==0&&c==0) continue; if(a[i]!=0) c=1; printf("%d",a[i]); }
printf("\n%d",r); }
|
题目描述:
给定两个非负整数(不含前导 0) A,B,请你计算 A/B 的商和余数。
输入格式
共两行,第一行包含整数 A,第二行包含整数 B。
输出格式
共两行,第一行输出所求的商,第二行输出所求余数。
数据范围
1≤A的长度≤100000 ,
1≤B≤10000,
B 一定不为 0
输入样例:
7
2
输出样例:
3
1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include<iostream> #include<vector> #include<algorithm>
using namespace std;
vector<int> div(vector<int> &A,int b,int &r){ vector<int> C; r = 0; for(int i = A.size() - 1; i>=0; i-- ){ r = r*10 + A[i]; C.push_back(r / b); r %= b; } reverse(C.begin(),C.end()); while(C.size() > 1 && C.back() == 0) C.pop_back(); return C; }
int main(){ string a; int b; cin >> a >> b; vector<int> A; for(int i =a.size() - 1 ;i >= 0; i-- ) A.push_back(a[i] - '0'); int r; auto C = div(A,b,r); for(int i = C.size() - 1; i >= 0 ; i--) printf("%d",C[i]); printf("\n"); printf("%d", r); return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include<stdio.h> #include<string.h> #define N 100010
char s1[N], s2[N]; int a[N]; int r=0; int c=0; void div(int len,int num){ int i; for(i = 0; i < len; i++) s1[i] = s1[i] - '0'; for(i = 0; i<len; i++){ r = r*10 + s1[i]; a[i] = r/num; r %= num; }
while(!a[i]) i--; if(i<0) printf("0"); for(i=0; i<len;i++) { if(a[i]==0&&c==0) continue; if(a[i]!=0) c=1; printf("%d",a[i]); }
printf("\n%d",r); }
int main() { scanf("%s %s",s1,s2); int len1 =strlen(s1); int len2 =strlen(s2); int num=0; int i; for(i = 0; i < len2; i++){ num = num*10+ (s2[i] - '0'); } div(len1,num); return 0; }
|
版权声明: 此文章版权由chen-yisen所有,如有转载,请注明明來自原作者