python高精度加法_高精度整数加法
发布日期:2021-06-24 12:22:19 浏览次数:2 分类:技术文章

本文共 3676 字,大约阅读时间需要 12 分钟。

可是我能写所以我骄傲 #include 

void add(char num1[],char num2[]){

unsigned len1=(unsigned int)strlen(num1);

unsigned len2=(unsigned int)strlen(num2);

char tempc,option;

char temparr[1000];

bool positive,s;

char *head=num1,*rear=num1+strlen(num1)-1;

while (head

tempc=*head;

*head=*rear;

*rear=tempc;

head++;

rear--;

}

head=num2;

rear=num2+strlen(num2)-1;

while (head

tempc=*head;

*head=*rear;

*rear=tempc;

head++;

rear--;

}

//两数同号

if (num1[strlen(num1)-1]!='-' && num2[strlen(num2)-1]!='-') {

if (len1

strcpy(temparr, num1);

strcpy(num1, num2);

strcpy(num2, temparr);

}

positive=true;

option='+'; //运算作加法

}

else if (num1[strlen(num1)-1]=='-' && num2[strlen(num2)-1]=='-') {

num1[strlen(num1)-1]='\0';

num2[strlen(num2)-1]='\0';

len1=(unsigned int)strlen(num1);

len2=(unsigned int)strlen(num2);

if (len1

strcpy(temparr, num1);

strcpy(num1, num2);

strcpy(num2, temparr);

}

positive=false;

option='+'; //运算作加法

}

//两数异号

else if (num1[strlen(num1)-1]=='-' && num2[strlen(num2)-1]!='-') {

num1[strlen(num1)-1]='\0';

len1=(unsigned int)strlen(num1);

len2=(unsigned int)strlen(num2);

if (len1

strcpy(temparr, num1);

strcpy(num1, num2);

strcpy(num2, temparr);

positive=true;

}

else if (len1==len2) {

char *t1=num1+strlen(num1)-1;

char *t2=num2+strlen(num2)-1;

bool change=false;

while (t1>=num1) {

if (*t1!=*t2) {

if (*t1

change=true;

break;

}

t1--;

t2--;

}

if (change) { //|num1|

strcpy(temparr, num1);

strcpy(num1, num2);

strcpy(num2, temparr);

positive=true;

}

else //|num1|>num2,则num1+num2结果为负

positive=false;

}

else { //lenth1>lenth2,则num1+num2结果为负

positive=false;

}

option='-'; //运算作减法

}

else {

num2[strlen(num2)-1]='\0';

len1=(unsigned int)strlen(num1);

len2=(unsigned int)strlen(num2);

if (len1

strcpy(temparr, num1);

strcpy(num1, num2);

strcpy(num2, temparr);

positive=false;

}

else if (len1==len2) {

char *t1=num1+strlen(num1)-1;

char *t2=num2+strlen(num2)-1;

bool change=false;

while (t1>=num1) {

if (*t1!=*t2) {

if (*t1

change=true;

break;

}

t1--;

t2--;

}

if (change) { //num1

strcpy(temparr, num1);

strcpy(num1, num2);

strcpy(num2, temparr);

positive=false;

}

else //num1>|num2|,则num1+num2结果为正

positive=true;

}

else { //lenth1>lenth2,则num1+num2结果为正

positive=true;

}

option='-'; //运算作减法

}

int k=0,carry=0; //开始运算

if (option=='+') {

for (k=0; k

tempc=((num1[k]-'0')+(num2[k]-'0')+carry)%10+'0';

carry=((num1[k]-'0')+(num2[k]-'0')+carry)/10;

num1[k]=tempc;

}

if (carry>0) {

if (k==strlen(num1)) {

num1[k++]='1';

num1[k]='\0';

}

else {

for (; k

tempc=((num1[k]-'0')+carry)%10+'0';

carry=((num1[k]-'0')+carry)/10;

num1[k]=tempc;

}

if (carry>0) {

num1[k++]='1';

num1[k]='\0';

}

}

}

}

else {

for (k=0; k

if (carry==1 && num1[k]=='0') {

num1[k]='9';

num1[k]=(num1[k]-'0')-(num2[k]-'0')+'0';

carry=1;

}

else {

num1[k]=(num1[k]-'0')-carry+'0';

if (num1[k]>=num2[k])

carry=0;

else

carry=1;

num1[k]=num1[k]>=num2[k]?(num1[k]-'0')-(num2[k]-'0')+'0':10+(num1[k]-'0')-(num2[k]-'0')+'0';

}

}

if (carry>0) {

for (; k

if (carry==1 && num1[k]=='0') {

num1[k]='9';

carry=1;

}

else {

num1[k]=(num1[k]-'0')-carry+'0';

carry=0;

}

}

}

num1[k]='\0';

}

if (positive==false) {

num1[k++]='-';

num1[k]='\0';

}

head=num1;

rear=num1+strlen(num1)-1;

while (head

tempc=*head;

*head=*rear;

*rear=tempc;

head++;

rear--;

}

memset(temparr, 0, sizeof(temparr));

if (positive==false) { //去除负数结果符号位高位的0

k=0; s=false;

temparr[k++]=num1[0];

for (int i=1; i

if (s || num1[i]!='0') {

s=true;

temparr[k++]=num1[i];

}

}

temparr[k]='\0';

}

else { //去除正数结果符号位高位的0

k=0; s=false;

for (int i=0; i

if (s || num1[i]!='0') {

s=true;

temparr[k++]=num1[i];

}

}

temparr[k]='\0';

}

printf("%s\n",temparr);

}

int main(){

void add(char [],char []);

char num1[1000],num2[1000];

while (~scanf("%s %s",num1,num2)) {

add(num1, num2);

}

return 0;

}

转载地址:https://blog.csdn.net/weixin_32688155/article/details/114467631 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java开发编程语言培训_各类编程语言程序员学习路线图
下一篇:jquery java jsonp_JSONP原理及JQUERY JSONP的使用

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月27日 07时46分52秒