Ⅰ c语言中字符串“1001”怎么转换成2进制数列1001
给你吧
这个题很明显不能直接乘,因为没有那个类型能到达如此之精度,因为有好多次方吗,于是我把每次相乘的结果结果保存在int r[151]数组里面,数组中每个元素保存结果中的一位,如例子中最后一组1.01 的12次方的结果为1.126825030131969720661201,那么最后,r中元素为:r[1]=1、r[2]=1、r[3]=2、r[4]=6........
计算时乘数忽略了小数点和无效0,如1.0100计算时使用101,而r初始值为乘数即,r[1]=1,r[2]=0、r[3]=1;然后与乘数101相乘12-1=11次,每次相乘都是r中每个元素与乘数相乘,相乘后r中每个元素不在是保存一位数,于是需要进位,使r中元素仍只有一位数。这样计算的话,r数组中每个元素都不会超出精度,因为每次相乘都是一位数和乘数相乘。由于忽略了小数点,所以计算前需要确定是否有小数点,如果有的话小数点后有几位有效数字也要确定,然后就可以得出计算完成后小数点后有几位有效数字,输出就能将小数点加进去了。
这就是大概过程 代码如下:
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string mlp; //乘数
int power; //乘数的幂
int r[151]; //保存结果
int hdot;
while(cin>>mlp>>power)
{
hdot=0;
for(int t=0;t<150;t++)
{
r[t]=-1;
}
if(mlp.find(".")!=string::npos)
hdot=mlp.length()-mlp.find(".")-1;
string::iterator itr=mlp.end()-1;
while(hdot>0&&itr>=mlp.begin())
{
if(*itr!='0')
hdot--;
itr--;
}
int cn=0;
while(itr>=mlp.begin())
{
if(*itr!='.')
{
r[cn]=*itr-'0';
cn++;
}
itr--;
}
int k=cn-1;
int m=0; //保存临时数;
while(k>-1)
{
m=m*10+r[k];
k--;
}
for(int i=1;i<power;i++)
{
int j=0;
while(r[j]>-1)
{
r[j]=r[j]*m;
j++;
}
j=0;
while(r[j]>-1)
{
if(r[j+1]==-1&&r[j]>=10)
r[j+1]=r[j]/10;
else
r[j+1]+=r[j]/10;
r[j]=r[j]%10;
j++;
}
}
hdot=hdot*power;
int cnt=0;
while(r[cnt]>-1)
{
cnt++;
}
if(hdot>=cnt)
{
cout<<".";
while(hdot>cnt)
{
cout<<"0";
hdot--;
}
hdot=0;
}
for(k=cnt-1;k>=0;k--)
{
if((k+1)==hdot&&hdot!=0)
cout<<".";
cout<<r[k];
}
cout<<endl;
}
return 0;
}
Ⅱ c语言 找出从1001开始的10个素数
1个判断素数的函数,从1001开始判断,如果是则输出,计数,输出10个后退出。
Ⅲ 用C语言编程 找出从 1001 开始的 50 个素数,并求出 50 个素数的平均数。
拿去慢慢研究吧
#include
<stdio.h>
#include
<math.h>
int
sushu(int
x)//这是用于判断素数的函数
{
int
i,y=sqrt(x);
for(i=2;i<=y;i++)
{
if(x%i==0)
{
x=0;
break;
}
}
return
x;//如果是就返回它本身,不是返回0
}
int
main(void)
{
int
a,i=0,sum=0;
double
m,n;
for(a=1001;i<50;a++)
{
if(sushu(a)==0)
continue;
else
{
printf("%d\n",a);//输出50个素数
sum+=a;//累加找到的素数
i++;//计数
}
}
m=(double)sum;//把int开型强制转换为double型
n=(double)i;
m/=n;//如果不强制转换为double型,求出的平均数会有误差
printf("%lf",m);
return
0;
}
Ⅳ 用c语言编写1累加到1001的程序
#include
"stdafx.h"
#include
<conio.h>
int
_tmain(int
argc,
_TCHAR*
argv[])
{
int
a
=
1,sum
=
0;
//a作为变量(自增量)使用,sum作为和(累加)使用
for(int
i
=
0;i
<
1001;i++)
//进行1001次循环
{
sum
+=
a;
//累加
a++;
//变量a的自增
}
printf("1~1001的和为%d",sum);
//输出1~1001的和
_getch();
return
0;
}
Ⅳ C语言中 为什么a〔0〕地址是1001 a [ 1 ] 就是1003了
a(0)和a(1)之间的地址是根据存储元素的字节数决定的,1001到1003证明数组a中存储的元素占内存2个字节!