查找介于n1与n2(0<n1<n2<32768g)之间的整数。满足:仅有2个相同的数字,并且是素数

【C++】帮忙看看这个int到double的转换_百度知道
【C++】帮忙看看这个int到double的转换
我这样定义的void main(){ double n1=0.0,n2=0.0,n3=0.0,n4=0.0; int i=219; n1+=i; n2+=i*i; n3+=i*i*i; n4+=i*i*i*i; cout&&n1&& cout&&n2&&cout&&n3&&cout&&n4&&}输出的结果n1,n2,n3都正确,但是第四个n4确出现了-1.9,我知道这是超出了long int型的范围,请问这是为什么,不是应该自动向double型转换吗?
四个219相乘得到,int类型默认是long int的最大值是超出了-=,然后转换为int类型为,是符合上述结果的我就是想知道,类型转换应该执行什么原则
提问者采纳
因为 i是整形,执行i*i的时候执行的是int型整数的乘法运算,结果仍然以int型整数保留起来,如果这个时候溢出,结果就是不正确的。举个简单的例子,cout && double(219*219*219*219) &&也是不能得到正确结果的。要记住转换总是逐个运算符进行的。
其他类似问题
为您推荐:
您可能关注的推广
double的相关知识
其他3条回答
你算下四个219相乘是多少,是不超double范围了
n3+=i*i*i;
n4+=1.0*i*i*i*i;
hi dear, you need to modify your code like following: n4+=1.0*i*i*i*i; so it will work. enjoy.我不能用baidu IM.没什么原则,只是出于优化的考虑,像你的例子就是, 能用int的时候,编译器是不会自动帮你转换成double的,因为int运算速度比double高很多。它也不会考虑你的运算会溢出。这里,你需要DIY一下。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一道C++题目_百度知道
一道C++题目
5.【程序功能】
查找介于n1与n2(0&n1&n2&32768)之间所有满足下列条件的整数:(1)该数的十进制表示中有且仅有两个相同的数字位;(2)该数是素数。
【测试数据与运行结果】
测试数据:n1=900
屏幕输出: 911
提问者采纳
/*输入范围: 900 1200911 &919 &929 &977 &991 &997 &19 102151 03 29 115393Press any key to continue*/#include&&stdio.h&int&IsPrime(unsigned&num)&{ unsigned&i,flag&=&1; if(num&&&2)&return&0; for(i&=&2;&i&*&i&&=&num&&&&&&++i)
if(num&%&i&==&0)&flag&=&0; return&}int&HasTwoEqualDigits(unsigned&num)&{&//&是否有两个相同的位 unsigned&i&=&0,j, char&s[15]; while(num)&{
s[i++]&=&num&%&10&+&'0';
num&/=&10; } s[i]&=&'\0'; for(i&=&0;&s[i];&++i)&{
for(j&=&0;&s[j];&++j)&{
if(s[i]&==&s[j])
if(cnt&==&2)&return&1; } return&0;}int&main()&{ int&i,m,n,cnt&=&0; printf(&输入范围:&&); scanf(&%d%d&,&m,&n); for(i&=&m;&i&&=&n;&++i)&{
if(IsPrime(i)&&&&HasTwoEqualDigits(i))&{
if(cnt&&&&cnt&%&10&==&0)&printf(&\n&);
printf(&%-4d&&,i);
} } if(cnt&%&10)&printf(&\n&); return&0;}
提问者评价
其他类似问题
为您推荐:
其他2条回答
先找素数,找到素数以后,转化成字符串,计算出长度,然后取摸比较数字。满足条件输出。完事。
我也知道啊 但我基础部太好
最好有答案
我看下我哪里不对
bool Isprime(int Sor){
for(int i=2;i&Sor-1;i++)
if(Sor%i == 0)
}}bool IsFix(int Sor){
char buff[6]={0};
sprintf(buff,&%d&,Sor);
int len = strlen(buff);
int pair = 0;
for(int i=0;i&len-1;i++)
for(int j = i+1;j&j++)
if(buff[i] == buff[j])
if(pair == 1)
}}两个核心函数给你了。。自己搞剩下的
//素数验证
bool IsPrimeNum(int nVal)
if(nVal & 2)
double dbRst= sqrt((double)nVal);
for(int n=2;n&=(int)dbRn++)
if(nVal % n == 0)
//相同数字验证
bool IsDoubleNum(int nVal)
int nCnt=0;
while(nVal & 0)
if(nCnt&=4)
a[nCnt++]=nVal%10;
nVal /=10;
for(int n=0;n&nCn++)
bool bHasOne =
for(int m=n+1;m&nCm++)
if(a[n] == a[m])
if(!bHasOne)
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁给定两个整数A和B(都是一字节),问把A变成B需要改变多少位(bit)?也就是说整数A和B的二进制表示中有多_百度知道
给定两个整数A和B(都是一字节),问把A变成B需要改变多少位(bit)?也就是说整数A和B的二进制表示中有多
题目没写完啊
为您推荐:
二进制的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁(C语言)帮忙编写求子串函数substr(s,n1,n2)_百度知道
(C语言)帮忙编写求子串函数substr(s,n1,n2)
编写求子串函数substr(s,n1,n2),在串s中从n1位置开始取n2个字符的子串....要完整的程序..从开始到结束袄...
void substr(char s[],int n1,int n2){&br/&char t[20]={\0};for(i=n1;i&=n1+n2;i++)t=strcat(t,s[i]);puts(t);}这个函数要用到#include&stdio.h&#include&string.h&
其他类似问题
为您推荐:
其他2条回答
#include&stdio.h&#include&string.h&void substr(char s[],int n1,int n2){int i,j;&br/&char t[512];&br/&for(i=n1,j=0;i&n1+n2;i++,j++)&br/&{&br/&t[j]=s[i];&br/&}t[j]='\0';puts(t);}
?库里面不是有吗?
substr的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁(文科)(1)若数列{an1}是数列{an}的子数列,试判断n1与l的大小关系;(2)①在数列{an}中,已知{an}是_百度知道
(文科)(1)若数列{an1}是数列{an}的子数列,试判断n1与l的大小关系;(2)①在数列{an}中,已知{an}是
(文科)(1)若数列{an1}是数列{an}的子数列,试判断n1与l的大小关系;(2)①在数列{an}中,已知{an}是一个公差不为零的等差数列,a5=6.当a3=2时,若存在自然数n1,n2,…,nl,…满足5<n1<n2<…<nl<…且a3,a5,a7,a9…an…是等比数列,试用t表示n1;②若存在自然数n1,n2,…,nl,…满足5<n1<n2<…<nl<…且a3,a5,a7,a9…an…构成一个等比数列.求证:当a3是整数时,a3必为12的正约数.
提问者采纳
解(1)∵数列{an1}是数列{an}的子数列∴nt≥t;(2)①因为3=2,a5=6,所以公差d=a5?a35?3=2,从而nt≥tan=a5+(n-5)d=2n-4,又a3,a5,a7,a9…an…是等比数列,所以公比q=5a3=3所以nt=a5?3t=2?3t+1又nt=2nt?4所以2nt-4=2?3t+1所以nt=3t+1+2②因为1>5时,a3,a5,an1成等比数列,所以3?an1=a52,即n1=&a52a3=3又{an}是等差数列,所以n1=a3+(n1?3)?a5?a32=3+6?a32(n1?3)所以3=3+6?a32(n1?3)即3?a3=6?a32(n1?3),所以
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 n1和n2 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信