我需要用c ++编写程序,将mm单位转换为km,m,cm和mm。换句话说,例如,输入7580341毫米时,它应输出7580341毫米等于7千米580米34厘米1毫米。我取而代之的是7公里6米34厘米1毫米。我对模数函数做错了,我无法弄明白。为什么用cm和mm计算正确的值,而不用m?请帮忙。
一切顺利
帕夫莱
int mm, cm, m, km;
cout << "Type in value in millimeter:\n";
cin >> mm;
cm = mm/10;
m = mm/1000;
km = mm/1000000;
cout << mm << "mm equals " << km << "km " << m%km << "m " << cm%m << "cm " << mm%cm << "mm\n";
return 0;
答案 0 :(得分:1)
您可以用它来迷住仪表:
double convert(string str){
string numb;
for(int i=0; i<str.length()-2; i++){
if ((str[i]>='0'&& str[i]<='9')||(str[i]='.')){
numb+=str[i];
}
}
int pos=str.length();
char const* n=numb.c_str();
double result = strtod(n, NULL);
if((str[pos-2]=='T')) // Terra
return result*(1e+12);
else if((str[pos-2]=='G')) //Giga
return result*(1e+9);
else if((str[pos-2]=='M')) //Mega
return result*(1e+6);
else if((str[pos-2]=='k')) //kilo
return result*(1e+3);
else if((str[pos-2]=='d')) //decimetre
return result*(1e-1);
else if((str[pos-2]=='c')) //centimetre
return result*(1e-2);
else if((str[pos-2]=='m')) //millimetre
return result*(1e-3);
else if((str[pos-2]=='μ')) //micrometre
return result*(1e-6);
else if((str[pos-2]=='n')) //nanometre
return result*(1e-9);
else if((str[pos-2]=='p')) //picometre
return result*(1e-12);
else
return -1; //if is false .
}
答案 1 :(得分:0)
这种情况正在发生,因为您没有“删除”您分配给每个单元的部件。
如果您知道它是例如7公里,那么构成公里数的毫米需要从总计数毫米中移除,否则你将再次“使用”它们。
所以,做:
const int km = mm / 1000000;
if(km > 0)
mm -= 1000000 * km;
等等。您还可以使用%
模运算符:
const int km = mm / 1000000;
mm %= 1000000;
答案 2 :(得分:0)
您需要使用模运算符
像这样的东西
km = mm/1000000;
m = (mm%1000000)/1000;
cm = ((mm%1000000)%1000)/10;
mm = ((mm%1000000)%1000)%10;