大数加,减,乘,取余一起
2016-04-29 11:14
162 查看
#include<iostream> #include<string> #define LEN 100 using namespace std; void add(char a[], char b[]){ /*********************装换*********************/ int num1[LEN]; int num2[LEN]; for (int i = 0; i < LEN; i++){ num1[i] = 0; num2[i] = 0; } int lena = strlen(a); int lenb = strlen(b); for (int i = lena - 1, j = 0; i >= 0; i--){ num1[j++] = a[i] - '0'; } for (int i = lenb - 1, j = 0; i >= 0; i--){ num2[j++] = b[i] - '0'; } for (int i = 0; i < LEN; i++){ num1[i] += num2[i]; } /*****************求和*******************/ for (int i = 0; i < LEN; i++) { if (num1[i] >= 10){ num1[i + 1] += num1[i] / 10; num1[i] %= 10; } } /************打印************************/ int i; for (i = LEN - 1; i > 0; i--){ if (num1[i] != 0) break; } for (; i >= 0; i--) cout << num1[i]; cout << endl; } void mul(char a[], char b[]) { /****************装换****************/ int num1[LEN]; int num2[LEN]; for (int i = 0; i < LEN; i++){ num1[i] = 0; num2[i] = 0; } int lena = strlen(a); int lenb = strlen(b); for (int i = lena - 1, j = 0; i >= 0; i--){ num1[j++] = a[i] - '0'; } for (int i = lenb - 1, j = 0; i >= 0; i--){ num2[j++] = b[i] - '0'; } /************************乘积*************/ int sum[LEN]; for (int i = 0; i < LEN; i++){ sum[i] = 0; } for (int i = 0; i < lena; i++) for (int j = 0; j < lenb; j++){ sum[i + j] += num1[i] * num2[j]; if (sum[i + j] >= 10){ sum[i + j + 1] += sum[i + j] / 10; sum[i + j] %= 10; } } /*******************打印*******************/ int i; for (i = LEN - 1; i > 0; i--){ if (sum[i] != 0) break; } for (; i >= 0; i--) cout << sum[i]; cout << endl; } void mod(char a[],int mod){ ///****************装换****************/ //int num1[LEN]; //int num2[LEN]; //for (int i = 0; i < LEN; i++){ // num1[i] = 0; // num2[i] = 0; //} int lena = strlen(a); //int lenb = strlen(b); //for (int i = lena - 1, j = 0; i >= 0; i--){ // num1[j++] = a[i] - '0'; //} //for (int i = lenb - 1, j = 0; i >= 0; i--){ // num2[j++] = b[i] - '0'; //} /***********取余*********************/ int ans = 0; for (int i = 0; i < lena; i++){ ans = ans * 10 + a[i] - '0'; ans = ans % mod; } cout << ans << endl; } void sub(char a[], char b[]){ int alen = strlen(a); int blen = strlen(b); int num1[LEN]; int num2[LEN]; for (int i = 0; i < LEN; i++){ num1[i] = 0; num2[i] = 0; } for (int i = alen - 1,j = 0; i >= 0; i--){ num1[j++] = a[i] - '0'; } for (int i = blen - 1,j = 0; i >= 0; i--){ num2[j++] = b[i] - '0'; } int flag = 0; if (alen > blen){ for (int i = 0; i < LEN; i++){ num1[i] -= num2[i]; } for (int i = 0; i < LEN; i++){ if (num1[i] < 0){ num1[i+1] -= 1; num1[i] += 10; } }; } if (alen < blen){ for (int i = 0; i < LEN; i++){ num2[i] -= num1[i]; } for (int i = 0; i < LEN; i++){ if (num2[i] < 0){ num2[i+1] -= 1; num2[i] += 10; } } flag = 1; } int ti; if (alen == blen){ for (int i = 0; i < LEN; i++){ if (a[i] != b[i]){ ti = i; break; } if (i == LEN - 1) cout << 0 << endl; } if (a[ti] > b[ti]){ for (int i = 0; i < LEN; i++){ num1[i] -= num2[i]; } for (int i = 0; i < LEN; i++){ if (num1[i] < 0){ num1[i + 1] -= 1; num1[i] += 10; } } } else{ for (int i = 0; i < LEN; i++){ num2[i] -= num1[i]; } for (int i = 0; i < LEN; i++){ if (num2[i] < 0){ num2[i + 1] -= 1; num2[i] += 10; } } flag = 1; } } int i; if (flag == 0){ for (i = LEN - 1; i > 0; i--){ if (num1[i] != 0) break; } for (; i >= 0; i--){ cout << num1[i]; } cout << endl; } if (flag == 1){ cout << "-"; for (i = LEN - 1; i > 0; i--){ if (num2[i] != 0) break; } for (; i >= 0; i--){ cout << num2[i]; } cout << endl; } } int main() { char a[] = "2345"; char b[] = "234567"; add(a, b); mul(a, b); mod(a, 10); sub(a, b); }
相关文章推荐
- C++中使用new最好要显示调用初始化函数
- Android 自定义 RatingBar (评分控件)
- 将Solr5部署到生产环境
- 正则表达式匹配
- 软考信息系统监理师:2016年4月22日作业
- C# 自定义Json解析工具
- CSS 属性选择器
- Android适配不同屏幕
- MVVM模式下如何使用ReactiveCocoa响应链式编程<二>
- ld: library not found for -lAFNetworking
- nyoj_39 水仙花数
- 基本光照与阴影(一)
- 资料文档
- common-codec加解密base64
- 如何描述PCIe SSD性能的稳定性?
- CSS 类选择器
- C++中的inline关键字
- SVN使用教程总结
- 检测wifi是否需要portal验证 公共场所wifi验证
- 无限极分类查找子孙树