75*100=7500
7500+34=7534
int i1=75;
int i2=34;
int dn=ceil(log10(i2+0.001)); //0.001 is for exact 10, exact 100, ...
int i3=i1*ceil(pow(10,dn)); <---- because pow would give 99.999999(for some optimization modes)
i3+=i2;
#include <iostream>
#include <string>
int appendDigit(int base, int append) {
std::string sBase = std::to_string(base);
std::string sAppend = std::to_string(append);
std::string result = sBase + sAppend;
return std::stoi(result);
}
int main() {
int a = 67;
int b = 4;
int c = appendDigit(a,b);
std::cout << c;
}
int append_digits(int i1, int i2) {
int result = 0;
while (i1) {
result *= 10;
result += i1 % 10;
i1 /= 10;
}
while (i2) {
result *= 10;
result += i2 % 10;
i2 /= 10;
}
int final_result = 0;
while (result) {
final_result *= 10;
final_result += result % 10;
result /= 10;
}
return final_result;
}
7条答案
按热度按时间zzlelutf1#
将第一个数字乘以第二个数字的10次幂,然后加上另一个数字。
示例:63和5
示例:75和34
**编辑:**字符串版本需要2个int到str的转换(很慢)和1个字符串连接(不快)和1个str到int的转换(很慢)。上转换需要2个加法,1个对数,2个上限,1个幂,1个乘法,所有这些都可以在cpu中完成,而不需要接触主内存来获取/设置子步骤的数据,这肯定比字符串版本的延迟更少。如果编译器设计将3-4个字符串存储在sse寄存器中,那么两者都会竞争性能。因为当一个忙碌计算“幂”函数时,另一个将忙于从sse中提取字符串,并将其一个接一个地放入必要的寄存器,并通过启动加法和乘法在另一个寄存器上构造。幂(10,x)函数可以用10 * 10 *10... x倍来交换,所以纯数学版本再次变得更快。
如果你需要的是可读性,eq-的答案是最好的imo。
pprl5pva2#
k75qkfdt3#
vuktfyat4#
计算现有数字的位数,乘以其十次幂,并与第二个数字相加。
mznpcxlj5#
下面是一个更严重的问题:
这避免了浮点数学和字符串转换。
kmb7vmvb6#
重构以减少代码重复留给读者作为练习。
xoshrz7s7#
c++代码: