输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。

 1 #include<iostream>
 2 #include<cassert>
 3 void multiply(const char *a,const char *b)
 4 {
 5     assert(a!=NULL && b!=NULL);
 6     int i,j,ca,cb,*s;
 7     ca=strlen(a);
 8     cb=strlen(b);
 9     s=(int *)malloc(sizeof(int)*(ca+cb));  //分配存储空间
10     for(i=0;i<ca+cb;i++)
11         s[i]=0;                     //每个元素赋初值为0
12
13
14     for(i=0;i<ca;i++)
15         for(j=0;j<cb;j++)
16             s[i+j+1]+=(a[i]-‘0‘)*(b[j]-‘0‘);  //两个嵌套的for循环,将字符串中的数字通过-‘0’
17     for(i=ca+cb-1;i>=0;i--)                   //转换为十进制数字
18         if(s[i]>=10)
19         {
20             s[i-1]+=s[i]/10;
21             s[i]%=10;
22         }
23
24     char *c=(char *)malloc((ca+cb)*sizeof(char));
25     i=0;
26     while(s[i]==0)
27         i++;
28     for(j=0;i<ca+cb;i++,j++)            //将十进制数字转换为字符,存储到字符数组中
29         c[j]=s[i]+‘0‘;
30     c[j]=‘\0‘;
31     for(i=0;i<ca+cb;i++)
32         std::cout<<c[i];
33     std::cout<<std::endl;
34     free(s);
35     free(c);
36 }
37
38 int main()
39 {
40     const char *strnum1="123";
41     const char *strnum2="456";
42     multiply(strnum1,strnum2);
43     return 0;
44 }

原文地址:https://www.cnblogs.com/mydomain/p/9610412.html

时间: 2024-10-08 11:07:42

输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。的相关文章

【C语言】用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数

<pre name="code" class="cpp">//用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数 #include <stdio.h> int max(int x,int y) { return (x>y)?x:y; } int min(int x,int y) { return (x>y)?y:x; } int main() { int (*p)(int,int); int

两个很大的数相乘

#include <iostream> #include<string.h> #include<stdlib.h> #include<stdio.h> using namespace std; const int maxN=200; char s1[maxN],s2[maxN]; int a[maxN],b[maxN]; int **ans=new int*[maxN]; int ret[2*(maxN+1)]; int main() { int len1,

输入两位学生的学号姓名 以及三门成绩 并输出

1 /* 输入学生成绩并显示 */ 2 # include <stdio.h> 3 4 struct student 5 { 6 char number[6]; 7 char name[6]; 8 int score[3]; 9 } stu[2]; 10 11 void output(struct student stu[2]); 12 13 void main() 14 { 15 int i, j; 16 for(i=0; i<2; i++) 17 { 18 printf("

C++如何输入单行和多行带空格的字符串并将字符串倒序输出

首先,我们知道在C++中,空格或者回车被认为是字符串的分割标志,使用cin输入string类的字符串时遇到会自动停止接收输入 例如,当如下程序时: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 string s; 6 cin>>s; 7 8 for(int j = s.size()-1 ; j>=0 ; j--){ 9 cout<<s.at(j); 10 } 11 retu

两道很好的dp题目【4.29考试】

A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现在给出一个长度为n-1的排列表示,问有多少种1到n的排列满足这种表示. 输入: 一个字符串S,S由I,D,?组成.?表示这个位置既可以为I,又可以为D. 输出: 有多少种排列满足上述字符串.输出排列数模1000000007 样例输入: ?D 样例输出: 3 数据范围: 20%的数据 S长度<=10

闰年的非法输入的问题

1.问题描述 输入年份,判断其是否为闰年. 2.判断条件 1)能被4整除且不能被100整除的为闰年. 2)能被100整除且被400整除的为闰年. 3.等价类划分 编号 有效等价类 编号 无效等价类 1 能被400整除 3 能被100整除不能被4整除   2 能被4整除不能被100整除 4 不能被4整除 5 非法输入(包括负数) 4.测试用例 编号 输入 覆盖等价类 输出 1 1600 1 1600是闰年 2 2012 2 2012是闰年 3 1700 3 1700非闰年 4 2014 4 201

LoadRunner同一个脚本运行两次结果相差很大的原因

如果同一个脚本运行两次结果相差特别大.后一次的响应时间比前一次的响应时间慢了特别多,而期间开发又未修改过程序排查问题: 1.查看下linux内存利用情况 free -m 是查看内存情况 (通常可用内存占10%是可接受范围内) 如果可用内存很小的话 :一种可能是程序有问题 :另一种可能是磁盘空间不足了 当磁盘空间不足就会去写内存 2.可以先看下第二种情况成立否 : 命令 tf -m 查看磁盘空间情况结果看到磁盘空间为0了 3.查看哪个进程占用了这么多 ,最好通过log日志进行分析.在运行性能测试脚

给定一个输入数据流,这个输入流很大,你不能将他们完全放在内存中。如何才能从这个输入流中随机的选取1000个数?

给定一个输入数据流,这个输入流很大,你不能将他们完全放在内存中.如何才能从这个输入流中随机的选取1000个数?

打印/输入很大的数的方法

有2种方法: (1)长的数据,一般(数据)变量(int long double等)是存不下的,因此,只能存成字符串 char num[128]="1606938044258990275541962092341162602522202993782792835301376" ; cout << num <<endl ; //完成输出! C++ 或 printf( "%s\n", num );//完成输出! C/C++(2)对于64位的大数字:如1