bign

算法笔记5.6--N的阶乘

吃可爱长大的小学妹 提交于 2020-01-26 08:58:19
题目描述 输入一个正整数N,输出N的阶乘。 输入 正整数N(0<=N<=1000) 输出 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 样例输入 0 4 7 样例输出 1 24 5040 代码: struct bign { int d [ 1000 ] ; int len ; bign ( ) { memset ( d , 0 , sizeof ( d ) ) ; len = 0 ; } } ; bign change ( char str [ ] ) { bign a ; a . len = strlen ( str ) ; for ( int i = 0 ; i < a . len ; i ++ ) { a . d [ i ] = str [ a . len - i - 1 ] - '0' ; } return a ; } bign multi ( bign a , int b ) { bign c ; int carry = 0 ; for ( int i = 0 ; i < a . len ; i ++ ) { int temp = a . d [ i ] * b + carry ; c . d [ c . len ++ ] = temp % 10 ; carry = temp / 10 ; } while ( carry != 0 ) { c . d [ c .

算法笔记之大整数运算

旧时模样 提交于 2020-01-20 10:15:44
一、高精度(大整数)加法 # include <bits/stdc++.h> using namespace std ; struct bign { int d [ 1000 ] ; int len ; bign ( ) { memset ( d , 0 , sizeof ( d ) ) ; len = 0 ; } } ; bign change ( char str [ ] ) { bign a ; a . len = strlen ( str ) ; for ( int i = 0 ; i < a . len ; i ++ ) { a . d [ i ] = str [ a . len - i - 1 ] - '0' ; //让整数顺位存储低位在低,高位在高。 } return a ; } bign add ( bign a , bign b ) { bign c ; int carry = 0 ; //进位 for ( int i = 0 ; i < a . len || i < b . len ; i ++ ) { int temp = a . d [ i ] + b . d [ i ] + carry ; //每一位相加加上相应的进位 c . d [ c . len ++ ] = temp % 10 ; //temp个位为该位 carry = temp / 10 ; /

1017. A除以B (20)

爷,独闯天下 提交于 2019-12-20 10:44:30
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔。 输出格式: 在1行中依次输出Q和R,中间以1空格分隔。 输入样例: 123456789050987654321 7 输出样例: 17636684150141093474 3 #include<cstdio> #include<cstring> const int maxn = 1010; struct bign{ int d[maxn]; int len; bign(){ memset(d,0,sizeof(d)); int len = 0; } }; bign change(char str[]){ bign a; a.len=strlen(str); for(int i = 0; i < a.len; i++){ a.d[i] = str[a.len- i - 1] - '0'; } return a; } bign devide(bign a,int b,int &r){ bign c; c.len = a.len; for(int i = a.len - 1; i >= 0; i--){ r = r * 10 + a.d[i]; if(r < b) c.d[i] = 0; else{

大整数运算模板总结

回眸只為那壹抹淺笑 提交于 2019-12-12 23:17:46
大整数运算模板总结。 大整数结构体表示 整型数组从低位到高位顺序存储每一位数字,另外需要存储数字的长度。 struct bign { int d[1000]; int len; bign(){ memset(d, 0, sizeof(d)); len = 0; } }; 大整数输入 一般通过字符串输入。 bign Change(string str)//输入字符串转大整数 { bign a; a.len = str.length(); for (int i = 0; i < a.len; i++) { a.d[i] = str[a.len - i - 1] - '0';//倒着赋值 } return a; } 大整数比较 int compare(bign a, bign b) { if (a.len > b.len)return 1; else if (a.len < b.len)return -1; else { for (int i = a.len - 1; i >= 0; i--)//从高位往低位比较 { if (a.d[i] > b.d[i])return 1; else if (a.d[i] < b.d[i])return -1; } return 0;//相等 } } 大整数加法 每一位顺次相加并进位。 bign add(bign a, bign b) { bign c