特殊乘法
题目描述
写个算法,对2个小于1000000000的输入,求结果。 特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5
输入描述:
两个小于1000000000的数
输出描述:
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
输入
123 45
输出
54
解题思路
题目的意思是要对两个整数,分别取其某一位数相乘再相加。
那么首先使用string 类型存放两个数,再将其用取字符串中字符的方式,将每一位数(字符)取出,再转化为对应的整数。
1 #include <stdio.h> 2 #include <iostream> 3 #include <string> 4 5 using namespace std; 6 int main() 7 { 8 string x,y; 9 while(cin >> x >> y) 10 { 11 int sum = 0; 12 for(int i = 0;i<x.length();i++) 13 for(int j = 0;j<y.length();j++) 14 { 15 sum = (x[i]-'0')* (y[j]-'0') + sum; 16 } 17 cout << sum; 18 } 19 }
Summary
1、对于该题目还有其他的解法,但是使用string类型来存放数据是占用内存较小的方式。
2、对于C++中的string类型,取其字符串长度的方式是 x.length()
3、将字符类型整数转化为对应的整数的方式就是直接减去'0' 字符。
在这里我总结一下C++中, sizeof(),strlen(),size(),length() 的区别
sizeof()
sizeof():返回所占总空间的字节数
sizeof(...)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。
strlen()
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符'\0'。返回的长度大小不包括'\0'。
size() 和 length()
c++中的size()和length()没有区别,都是用来计算string类对象的长度,假如有一个string对象str,则str.size()和str.length()会返回它们的长度,它们的作用是相同的
c/c++ strlen(str)和str.length()和str.size()都可以求字符串长度。
其中str.length()和str.size()是用于求string类对象的成员函数
strlen(str)是用于求字符数组的长度,其参数是char*。