Ⅰ 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個位元組!