从毫米到公里的转换(以较小的单位溢出,例如m)

时间:2013-10-22 14:14:19

标签: c++

我需要用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;

3 个答案:

答案 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;