static_cast对double转换的问题

dabasir 2005-12-13 01:23:27
我是个C++新手,在做练习的时候遇到问题:用turbo C++或者DEV-C++和用MS的VC编译运行结果不一样。源码如下:
#include<iostream.h>
#include<math.h>
#include <stdlib.h>
int main()
{
cout<<"please input a number"<<endl;
long int num,mun=0,n=5,temp1,temp2,temp3;
cin>>num;
for(int i=0;i<=5;i++)
{
temp1=static_cast<long int>(pow(10,(5-i)));
temp2=static_cast<long int>(pow(10,i));
temp3=static_cast<long int>(pow(10,(5-i)));
mun+=(num/temp1*temp2);
//cout<<mun<<endl;//下面给出的运行结果是在这一行没被注释的情况下
if(mun!=0) num=num%temp3;
else n--;//n是用来记录输入的是几位数
}
cout<<n<<endl;
cout<<mun<<endl;
system("pause");
return 0;
}

功能是输入一个《=5位的整数,输出这个数的位数,并反转输出
比如输入1234,则输出4 4321
算法:(以输入1234为例)
1234除以10000 得0 余1234
1234除以1000 得1 余234
234除以100 得2 余34
34除以10 得3 余4
4除以1 得4 余0



数0*10^0+1*10^1+2*10^2+3*10^3+4*10^4
得到得结果就是反转的4321
在VC6.0中编译运行结果是:
please input a number
1234
0
0
100
2100
32100
432100
3
432100

在dev-C++中编译运行结果是:
please input a number
1234
0
0
99
2099
32096
632096
3
632096


请教问题的原因和解决办法。
...全文
661 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocai0001 2005-12-13
  • 打赏
  • 举报
回复
算法并不是因为static_cast的问题.
我写了一个算法,你可以看看思路:

#include<iostream.h>
#include <stdlib.h>

int main()
{
cout<<"please input a number"<<endl;
long int num,mun=0,n=0,temp1;
cin>>num;
while(num>0)
{
temp1 = num % 10; // 取num个位数
mun = mun*10 + temp1; //反转移位
num /= 10;
++n; // 位数加1
}
cout<<n<<endl;
cout<<mun<<endl;
system("pause");
return 0;
}

//用VC6单步运行, 并跟踪其中的一些变量值的变化情况, 就能看出算法的原理了.
xiaocai0001 2005-12-13
  • 打赏
  • 举报
回复
楼主的算法本身设计得有问题
guyanhun 2005-12-13
  • 打赏
  • 举报
回复
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
string buf;
cout<<"please input :"<<endl;
cin>>buf;
int len = buf.size();
reverse(buf.begin(),buf.end()); //翻转字符串
cout << len << endl
<< buf <<endl;
system("pause");
return 0;
}

// 这个对输入字符串 和 数字都有效。
cunsh 2005-12-13
  • 打赏
  • 举报
回复
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
cout<<"please input a number"<<endl;
long int num;
cin>>num;

char buf[10];
sprintf(buf,"%d",num);

int len = strlen(buf);

reverse(buf,buf+len); //翻转字符串
cout << len << endl
<< buf <<endl;
system("pause");
return 0;
}
dabasir 2005-12-13
  • 打赏
  • 举报
回复
看来我这几天学的还只是那么一点点。前路漫漫
Re:CCNA_CCNP 思科网络认证 PAT NAT 端口或地址转换 与端口映射======================# 本章课程大纲        公网地址和私网地址        NAT应用场景        静态NAT  :static  地址转换        动态NAT  :dynamic地址转换        PAT        :端口地址转换        端口映射 :port map        在Windows上同时实现的NAT和端口映射 # 私网地址三类 A类:10.0.0.0                                255.0.0.0(1网段) B类:172.16.0.0 -172.31.0.0         255.255.0.0(16网段) C类:192.168.0.0-192.168.255.0  255.255.255.0(255网段) # NAT 的使用场景        NAT的最初的目的是允许把私有IP地址映射到公网地址,以减缓IP地址空间的消耗。        当一个组织更换它的互联网服务提供商ISP,但不想更改内网配置方案时,NAT同样很有用途。        以下是适于使用NAT的多种情况:         企业内网接入Internet节省公网地址         单向访问         大方向:内网访问互联网(互联网上主机不能够访问内网主机)         小方向:同单位实现两个网段之间单向访问(涉密部门能够访问其他部门,反之不可)         增加一个网段          避免在主干路由器增加到这个网段的路由         在Windows上实现的NAT和端口映射 # 网络地址转换的类型        下面介绍一下NAT的三种类型。         静态NAT 是为了在私网地址和公网地址间,允许一对一映射而设计的。         或者IPv4和IPv6之间的转换(典型)         不节省公网地址,故公网地址的利用效率不高,         无任何安全性,外网可以通过公网地址直接攻击内网主机,好像只增加路由器的工作         适用场景类似代理,可以较方便的更换主机,而无需修改路由器的配置         故应用不够广泛...         动态NAT 可以实现映射一个未注册 IP地址到注册IP地址池中的一个注册IP地址。         多对一,或多对多         比较PAT优势:避免被误认为攻击而被封ip地址         不太节省地址,应用不广泛         复用是最流行的NAT配置类型,也被称为端口地址映射(PAT)。         通过使用PAT,可实现上千个用户仅通过一个真实的全球 IP地址连接到Internet。         缺点:增加延迟,消耗路由器性能 # 端口映射(port mapping) 允许Internet上的计算机通过企业路由器的公网IP地址访问到内网的服务器------------------------------------------------         

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧