c语言大数求和_指数幂的加法

c语言大数求和_指数幂的加法文章目录1.大数加法2.大数幂运算3.大数求余废话不多说,直接上代码了。1.大数加法stringgetCountAdd(stringa,stringb){ stringc=””; intbit=-1;//判断是否进位-1为否,其他为进位数 inti=a.length()-1;//获得a字符串长度 intj=b.length()-1;//获得b字符串长度 //第一种情况两者都处理完 while(i!=-1&&j!

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


废话不多说,直接上代码了。

1. 大数加法

string getCountAdd(string a, string b)
{ 

string c = "";
int bit = -1; //判断是否进位 -1为否,其他为进位数
int i = a.length()-1; //获得a字符串长度
int j = b.length()-1; //获得b字符串长度
//第一种情况 两者都处理完
while (i != -1 && j != -1)
{ 

int t1 = a[i] - 48; 
int t2 = b[j] - 48;
//不存在进位
if (bit == -1)
{ 

if (t1 + t2 >= 10)
{ 

int d = (t1 + t2) % 10;
c.insert(0, 1, d + 48);
bit = (t1 + t2) / 10;
}
else
{ 

c.insert(0, 1, t1 + t2 + 48);
}
}
//存在进位
else
{ 

if (t1 + t2 + bit >= 10)
{ 

int d = (t1 + t2 + bit) % 10;
c.insert(0, 1, d + 48);
bit = (t1 + t2 + bit) / 10;
}
else
{ 

c.insert(0, 1, t1 + t2 + bit + 48);
bit = -1;
}
}
i--;
j--;
}
//第二种情况 前者处理完
while (i == -1 && j != -1)
{ 

int t2 = b[j] - 48;
if (bit == -1)
{ 

c.insert(0, 1, b[j]);
}
else
{ 

if (t2 + bit >= 10)
{ 

int d = (t2 + bit) % 10;
c.insert(0, 1, d + 48);
bit = (t2 + bit) / 10;
}
else
{ 

c.insert(0, 1, t2 + bit + 48);
bit = - 1;
}
}
j--;
}
//第三种情况 后者处理完
while (i != -1 && j == -1)
{ 

int t1 = a[i] - 48;
if (bit == -1)
{ 

c.insert(0, 1, a[i]);
}
else
{ 

if (t1 + bit >= 10)
{ 

int d = (t1 + bit) % 10;
c.insert(0, 1, d + 48);
bit = (t1 + bit) / 10;
}
else
{ 

c.insert(0, 1, t1 + bit + 48);
bit = -1;
}
}
i--;
}
//最后再判断是否存在进位
if (bit != -1)
{ 

c.insert(0, 1, bit + 48);
}
bit = -1;
return c;
}

在这里插入图片描述


2. 大数幂运算

string getCountExp(int a, int b)
{ 

string a1 = to_string(a);
int i = a1.length()-1;//a的最后下角标
//m位数*n位数长度不会超过m+n位
string temp = a1; //temp一直变化
string temp_2 = "0";
int bitcount = 0; //判断当前位数
int bit = -1;//判断是否存在进位
string * arr = new string[a1.length()];//保存每次计算的数
int arr_i = 0;
for (int x = 1; x < b; x++)//几次方就循环几次
{ 

while (i != -1)//乘数的位数
{ 

//temp * a1
int t1 = a1[i] - 48;
int j = temp.length() - 1;//temp的最后下角标
for (int z = 0; z < bitcount; z++)
{ 

arr[arr_i].insert(0, 1, '0');
}
while (j != -1)//temp的位数
{ 

int t2 = temp[j] - 48;
if (bit == -1)//判断是否有进位
{ 

if (t1*t2 >= 10)
{ 

int d = (t1*t2) % 10;
arr[arr_i].insert(0, 1, d + 48);
int d_2 = (t1*t2) / 10;
bit = d_2;
}
else
{ 
 
int d = t1*t2;
arr[arr_i].insert(0, 1, d + 48);
}
}
else
{ 

if ((t1*t2)+bit >= 10)
{ 

int d = ((t1*t2) + bit) % 10;
arr[arr_i].insert(0, 1, d + 48);
int d_2 = ((t1*t2) + bit) / 10;
bit = d_2;
}
else
{ 

int d = (t1*t2) + bit;
arr[arr_i].insert(0, 1, d + 48);
bit = -1;
}
}
j--;
}
if (bit != -1)
{ 

arr[arr_i].insert(0, 1, bit + 48);
bit = -1;
}
//走完一圈
//计算每一位的数,最后相加
//temp_2=temp_2+arr[arr_i];
temp_2 = getCountAdd(temp_2, arr[arr_i]);
bitcount++;
arr_i++;
i--;
}
bitcount = 0;
temp = temp_2;
temp_2 = "0";
//temp_2 = "0";
for (int z = 0; z < arr_i; z++)
{ 

arr[z] = "";
}
arr_i = 0;
i = a1.length() - 1;//a的最后下角标
}
return temp;
}

在这里插入图片描述


3.大数求余

int getCountMod(string a, int b)
{ 

int bit = -1; //判断是否需要进位
//例如4255%5
int i = 0;
while (i < a.length())
{ 

int t1 = a[i] - 48;
if (bit == -1)
{ 

if (t1%b > 0)
{ 

bit = t1%b;
}
}
else
{ 

if (((bit * 10) + t1) % b>=0)
{ 

bit = ((bit * 10) + t1) % b;
}
}
i++;
}
if (bit != -1)
{ 

return bit;
}
else
{ 

return 0;
}
return 0;
}

在这里插入图片描述


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185121.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 如何查看tomcat版本_tomcat修改端口号

    如何查看tomcat版本_tomcat修改端口号一、通过tomcat版本文件查看  找到tomcat目录,进入”xxx/tomcat/bin”目录,执行”shversion.sh”。如果没有设置JAVA_HOME和JRE_HOME环境变量则会报如下错误:[jieyu.ljy@tripco011182064160.na62xxx/tomcat/bin]$shversion.shNeithertheJAVA_HOMEn…

  • [日常训练]AekdyCoin的跳棋「建议收藏」

    [日常训练]AekdyCoin的跳棋「建议收藏」AekdyCoin正在玩一个游戏,该游戏要用到两副牌和一个数轴和一个棋子。刚开始的时候棋子位于数轴的0位置。然后AekdyCoin交替的从两副牌中抽取一张牌,然后执行相应的动作。设这两幅牌为A

  • 数据库概念结构设计_数据库设计阶段分为

    数据库概念结构设计_数据库设计阶段分为概念结构设计:将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程。一、概念模型在需求分析阶段所得到的应用需求应该首先抽象为信息世界的结构,然后才能更改、更准确地用某一数据库管理系统实现这些需求。概念模型的主要特点:1.能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真是模型。2.易于理解,可以用它和不熟悉…

    2022年10月12日
  • C3P0连接池详解及配置「建议收藏」

    C3P0连接池详解及配置「建议收藏」C3P0连接池详解及配置数据库连接是一个耗费大量资源且相当慢的操作,所以为了提高性能和连接速度,诞生了连接池这样的概念。在多用户并发操作过程中,连接池尤为重要。它是将那些已连接的数据库连接存放在一个容器里(连接池),这样以后别人要连接数据库的时候,将不会重新建立数据库连接(这样蜗牛的慢动作谁都受不了的),他会直接从连接池里取出可用的连接,用户使用完毕后,连接又重新回到连接池

  • ubuntu更改内核版本_ubuntu切换内核进入系统

    ubuntu更改内核版本_ubuntu切换内核进入系统背景新安装的ubuntu20内核版本是5.8,对于我个人来说太高了,需要安全地更换内核到低版本。如果是需要内核升级的,本文也适用。多内核并存或者删除其他内核方法同样适用。一、检查自己的内核版本uname-aLinuxlinux5.4.0-66-generic#74-UbuntuSMPWedJan2722:54:38UTC2021x86_64x86_64x86_64GNU/Linux我的内核也就是5.4二、下载所需内核选择1:安装apt最新的内核版本sudo

  • 五千字长文为你揭秘滴滴共享出行派单算法原理(干货)「建议收藏」

    五千字长文为你揭秘滴滴共享出行派单算法原理(干货)「建议收藏」关注ITValue,看企业级最新鲜、最具价值报道!本文作者|滴滴首席算法工程师导读:说到滴滴的派单算法,大家可能感觉到既神秘又好奇,从出租车扬召到司机在滴滴平台抢…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号