长整数相加减

  1 #include<stdio.h>
  2 #include<string>
  3 using namespace std;
  4
  5 const int N=30;
  6 int  min(int n,int m)//返回两个数中的最小一个数
  7 {
  8     return (n<m) ? n : m;
  9 }
 10
 11 int  max(int n,int m)//返回两个数中的最大一个数
 12 {
 13     return (n>m) ? n : m;
 14 }
 15
 16 void Add()//两个长整数相加
 17 {
 18     int i,carry;
 19     char num1[N],char num2[N];//数字1,数字2
 20     int strlen_num1,strlen_num2;//数字1的长度,数字2的长度
 21     int Num1[N],Num2[N],Result[N];
 22     int minnum,maxnum;//两个数中长度最大的一个
 23     printf("        ---------Add----------\n");
 24     printf("请输入整数1:");
 25     scanf("%s",&num1);
 26     printf("请输入整数2:");
 27     scanf("%s",&num2);
 28
 29     strlen_num1 = strlen(num1);//获得num1的长度
 30     strlen_num2 = strlen(num2);//获得num2的长度
 31     //printf("%d",strlen_num1);
 32
 33     for(i=0;i<strlen_num1;i++)
 34     {
 35         Num1[i] = num1[strlen_num1-1-i] - ‘0‘;//字符转化为整数
 36     //    printf("%d\n",Num1[i]);
 37
 38     }
 39
 40     for(i=0;i<strlen_num2;i++)
 41     {
 42         Num2[i] = num2[strlen_num2-1-i] - ‘0‘;//字符转化为整数
 43     }
 44
 45
 46     minnum = min(strlen_num1,strlen_num2);
 47     maxnum = max(strlen_num1,strlen_num2);
 48
 49     carry = 0;//进位初始为0
 50     for(i=0;i<minnum;i++)
 51     {
 52         Result[i] = (Num1[i] + Num2[i] + carry) % 10;
 53         carry = (Num1[i] + Num2[i] + carry)/10;
 54     }
 55
 56
 57     if(strlen_num1>minnum)
 58     {
 59         for(i=minnum;i<strlen_num1;i++)
 60         {
 61             Result[i] = (Num1[i]+ carry) % 10;
 62             carry = (Num1[i]+ carry)/10;
 63
 64         }
 65     }
 66
 67     if(strlen_num2>minnum)
 68     {
 69         for(i=minnum;i<strlen_num2;i++)
 70         {
 71             Result[i] = (Num2[i]+ carry) % 10;
 72             carry = (Num2[i]+ carry)/10;
 73         }
 74     }
 75
 76     if(carry>0)//最后一位有进位
 77     {
 78         Result[maxnum] = 1;
 79         maxnum++;
 80     }
 81     printf("结果:");
 82     printf("%s+%s=",num1,num2);
 83     for(i=maxnum-1;i>=0;i--)
 84     {
 85         printf("%d",Result[i]);
 86     }
 87     printf("\n\n");
 88 }
 89
 90 void Sub()//两个长整数相减
 91 {
 92     int i,j,carry;
 93     char num1[N],char num2[N];//数字1,数字2
 94     int strlen_num1,strlen_num2;//数字1的长度,数字2的长度
 95     int Num1[N],Num2[N],Result[N];
 96     int minnum,maxnum;//两个数中长度最大的一个
 97     printf("        ---------Sub----------\n");
 98     printf("请输入整数1:");
 99     scanf("%s",&num1);
100     printf("请输入整数2:");
101     scanf("%s",&num2);
102
103     strlen_num1 = strlen(num1);//获得num1的长度
104     strlen_num2 = strlen(num2);//获得num2的长度
105
106     for(i=0;i<strlen_num1;i++)
107     {
108         Num1[i] = num1[strlen_num1-1-i] - ‘0‘;//字符转化为整数
109     }
110
111     for(i=0;i<strlen_num2;i++)
112     {
113         Num2[i] = num2[strlen_num2-1-i] - ‘0‘;//字符转化为整数
114     }
115
116     minnum = min(strlen_num1,strlen_num2);
117     maxnum = max(strlen_num1,strlen_num2);
118
119     if(minnum==strlen_num1)//被减数小
120     {
121         for(i=minnum;i<maxnum;i++)Num1[i] = 0;//补0
122         for(i=0;i<maxnum;i++)
123         {
124             if(Num2[i]<Num1[i])//需要借位
125             {
126                 j = i +1;
127                 while(j==0)
128                 {
129                     Num2[j] += 9;
130                     j++;
131                 }
132                 Num2[j]--;
133                 Result[i] = Num2[i] + 10 - Num1[i] ;
134             }else Result[i] = Num2[i] - Num1[i] ;
135             //printf("%d %d\n",Result[i],carry);
136         }
137
138         printf("结果:");
139         printf("%s-%s=",num1,num2);
140         printf("-");
141         for(i=maxnum-1;i>=0;i--)
142         {
143             if(Result[i]!=0)printf("%d",Result[i]);
144         }
145         printf("\n");
146     }else{//被减数大
147         for(i=minnum;i<maxnum;i++)Num2[i] = 0;//补0
148         for(i=0;i<maxnum;i++)
149         {
150             if(Num1[i]<Num2[i])//需要借位
151             {
152                 j = i +1;
153                 while(j==0)
154                 {
155                     Num1[j] += 9;
156                     j++;
157                 }
158                 Num1[j]--;
159                 Result[i] = Num1[i] + 10 - Num2[i] ;
160             }else Result[i] = Num1[i] - Num2[i] ;
161             //printf("%d %d\n",Result[i],carry);
162         }
163
164         printf("结果:");
165         printf("%s-%s=",num1,num2);
166         for(i=maxnum-1;i>=0;i--)
167         {
168             if(Result[i]!=0)printf("%d",Result[i]);
169         }
170         printf("\n");
171     }
172 }
173 int main()
174 {
175     int select,con;
176     printf("-----------两个长整数相加减------------\n");
177     do{
178         printf("        -----------------------\n");
179         printf("       |--------1::加法-------|\n");
180         printf("       |--------0::加法-------|\n");
181         printf("        -----------------------\n");
182         printf("你的选择:");
183         scanf("%d",&select);
184         if(select==1)
185         {
186             Add();
187         }else {
188             Sub();
189         }
190         printf("        -----------------------\n");
191         printf("       |--------1::继续-------|\n");
192         printf("       |--------0::退出-------|\n");
193         printf("        -----------------------\n");
194         printf("你的选择:");
195         scanf("%d",&con);
196     }while(con==1);
197     return 0;
198 }
时间: 2024-08-10 12:24:50

长整数相加减的相关文章

C语言关于利用sscanf实现字符串相加减

#include<stdio.h>#include<string.h>void main(){ int a; int b; char str1[10] = "99999"; char str2[10] = "1111111"; char str[30]; int k = 0, i = 0, j = 0; for (k = 0; k < 30&&i<strlen(str1);){ str[k++] = str1[i+

链表解大数据相加减相乘

/*题意:大数相加减相乘单链表的运用*/#include<stdio.h>#include<stdlib.h>#include<string.h> char c;int flag; typedef struct node{ char data; struct node *next;} Node; Node *a[10]; Node *create_link(){ Node *head,*p; head=p=NULL; char m; while(1) { scanf(&

js实现日期的相加减、以及日期的比较

// js实现日期的相加减 function dateOperator(date, days, operator) { date = date.replace(/-/g, "/"); //更改日期格式 var nd = new Date(date); nd = nd.valueOf(); if (operator == "+") { nd = nd + days * 24 * 60 * 60 * 1000; } else if (operator == "

java处理日期时间 相加减大全

java处理日期时间 相加减 JAVA处理日期时间常用方法: 1.java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法.瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量. 例: Java代码 1. Calendar cal

C++ string 实现大整数相加减

任意两个大整数的加减算法,可自动判断正负号,代码如下: #include <iostream> #include <vector> #include <cstring> #include <algorithm> #include <string> using namespace std; string BigInegerAdd(string s1, string s2) // s1+s2; { int len = s1.size()>s2.

mysql 多条记录判断相加减进行计算

code        pay    payflag   00001   100.00   0   00001   50.00     1   00001   50.00     0   00002   200.00    0      pay 是 decimal,payflag 0 是付款, 1 是退款   把code相同并payflag=0的pay相加减去payflag=1的pay得到下面这下的数据    code        pay     00001   100.00     0000

javaScript日期相加减例子

当前时间加上2天 var d = new Date("2015-7-31"); d.setDate(d.getDate()+2); var addTwo=d.getFullYear()+"年"+(d.getMonth()+1)+"月"+d.getDate()+"日"; "控制台输出==============="+"当前日期加2天:"+addTwo; 使用这种方法,月份也会给你计算. 注

分数相加减的代码(c++)

#include <iostream> using namespace std; int gy(int a,int k1) {int min; if(a>k1)min=k1; else min=a;     while(min)     {   if(a%min==0&&k1%min==0)            {if(k1/min==1) cout<<a/min<<endl;                else cout<<a/

sql两个字段相加减,第三个字段没有值的原因.

错误的写法:(in_story_num-out_story_num) as story_num 正确的写法:(nvl(in_story_num,0)-nvl(out_story_num,0)) as story_num (注:利用nvl函数)