个人网站备案名称大全,免费html网页模板,阳泉网站建设网站,wordpress怎样输入分数题目描述
给出两个非负整数#xff0c;求它们的乘积。
输入格式
输入共两行#xff0c;每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例
输入
1
2
输出
2
说明/提示
每个非负整数不超过 10^2000
思路都写在代码里了。。。
直接上代码 …题目描述
给出两个非负整数求它们的乘积。
输入格式
输入共两行每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例
输入
1
2
输出
2
说明/提示
每个非负整数不超过 10^2000
思路都写在代码里了。。。
直接上代码
#includeiostream
#includecstring
#includealgorithm
using namespace std;
const int N 1e5;
char a[N], b[N];
int k, arr[N], len;
string str[N], s;
void init()
{//初始化,第i行字符串前面就有i个0如下面123*111//我们倒叙插入所以第一行是321第二行就是0321第三行就是00321 /** 123* 111* 123123012300*/for (int i 0; i 10000; i){int j i;while (j--)str[i] 0 0;}
}
int main()
{init();cin a b;int lena strlen(a); int lenb strlen(b);for (int i lenb - 1; i 0; i--){int c 0;for (int j lena - 1; j 0; j--){int p1 b[i] - 0;int p2 a[j] - 0;c p1 * p2 c; //根据乘法计算我们从第二行的个位数开始一次乘上第一行的每一位数如123*123就是先1*123再2*123...int u c % 10; //算了不想注释了就是小学乘法的计算方法str[k] u % 10 0; //储存第二行每位数乘上第一行的计算结果因为初始化已经补0直接拼接就行/*如 123* 111-----123123012300那么第一行就是存储 321第二行就是存储 0321第三行就是存储 00321写到这里就会发现我们现在只需要把每一项相加就可以再反向输出就可以了*/c / 10; //最后别忘了进位}while (c) //如果最后c还是大于0接着进位{str[k] c 0;c / 10;}int w i - 1;k;}//开始计算每一行相加的结果for (int i 0; i k; i){int c 0;for (int j 0;str[i][j]; j){int p1 str[i][j] - 0;int c arr[j] p1;arr[j] c % 10;c / 10;arr[j 1] c;len max(len, j 1); //计算最后长度因为不确定最后一次相加有没有进位我们统一当作进位的长度输出的时候再进行特判}}//反向输出bool flag true;for (int i len-1; i 0; i--){ if (arr[len - 1] 0flag){flag false;continue;}cout arr[i];}cout endl;return 0;
}
算法小白的刷题日记。