C/C++编程小练习 大数乘方
来源:互联网 发布:下载强力卸载软件 编辑:程序博客网 时间:2024/05/17 21:41
把先前的大数乘法做了一些修改和整合
#include <iostream>#include <cmath>#include <cstring>using namespace std;void reverse_str(char *a,int size){for(int i=0;i<size/2;++i){char t=a[i];a[i]=a[size-i-1];a[size-i-1]=t;}}void large_mul(char a[],char b[],char c[]){//修改了的大数乘法函数char a_t[20000]={0};//用临时变量来运算,避免乘方运算时数据之间的相互影响char b_t[20000]={0};char c_t[40001]={0};strcpy(a_t,a);strcpy(b_t,b);int a_len=strlen(a_t);int b_len=strlen(b_t);reverse_str(a_t,a_len);reverse_str(b_t,b_len);for(int i=0;i<b_len;++i){for(int j=0;j<a_len;++j){int k=i+j;c_t[k]+=(a_t[j]-'0')*(b_t[i]-'0');if(c_t[k]>9){c_t[k+1]+=(c_t[k]/10);c_t[k]=c_t[k]%10;}}}int j;for(j=a_len+b_len;j>0;--j){if(c_t[j]!=0){break;}}c_t[j+1]=0;for(int i=j;i>=0;--i){c_t[i]=c_t[i]+'0';}reverse_str(c_t,strlen(c_t));strcpy(c,c_t);}void n_large_mul(char a[],int n,char c[]){if(n==0){strcpy(c,"1");return;}if(n==1){strcpy(c,a);return;}large_mul(a,a,c);for(int i=2;i<n;++i){large_mul(a,c,c);}}int main() {char a[20000]={0};char c[40001]={0};cin>>a;int n;cin>>n;n_large_mul(a,n,c);cout<<c<<endl;return 0;}
0 0
- C/C++编程小练习 大数乘方
- C/C++编程小练习 大数乘方(快速幂算法实现)
- C/C++编程小练习 大数阶乘
- bnu1076 大数乘方 C语言版
- C编程小练习
- C/C++编程小练习 大数乘法之浮点大数乘法算法
- C/C++编程小练习 大数加法之浮点大数加法算法
- C/C++编程小练习 大数减法之浮点大数减法算法
- C语言编程小练习
- C语言小练习
- C小练习
- C 小练习
- c语言小练习
- C++“类”小练习
- c语言小练习
- c c c 语言 小练习
- C/C++编程小练习 函数实现学生管理系统
- C/C++编程小练习 数独(DFS算法实现)
- python 爬取 apache 遍历目录 文件
- 测试csdn代码显示
- 数据结构实验之链表四:有序链表的归并
- 目标跟踪算法——KCF入门详解
- 线程实现tcp服务器
- C/C++编程小练习 大数乘方
- 常用字符串解析与处理方法
- Android SDK 更新那点事
- C udp实现c/s
- MATLAB 如何将程序打包成EXE 可执行文件
- airbnb-react-styleguide-chinese
- 二手电脑与Ubuntu的经历-1-适合装Linux的电脑
- (OK) android-5.0 sensor工作原理—sensorservice的启动(二)
- Android开发——开关控件Switch和ToggleButtn