當前位置:編程學習大全網 - 編程語言 - C++編程題:把壹個超過2的32次方的十進制正整數轉化為十六進制數?

C++編程題:把壹個超過2的32次方的十進制正整數轉化為十六進制數?

用數組來存大數..

大數模和大數除,壹會兒幫妳寫壹個,先占個位置.

//抱歉,有事去了,寫了壹半沒寫.現在發壹下我寫的.

#include <stdio.h>

#include <string.h>

int main()

{

char a[100];

int b[100],c[100];

int i,len;

while(gets(a))

{

len=strlen(a);

memset(b,0,sizeof(b));

for(i=0;i<len;i++)

b[i]=a[i]-'0';

int remind=b[0],temp,k=0,p=0;

while(1)

{

remind=b[p];

for(i=p+1;i<len;i++)

{

temp=b[i];

b[i]=(b[i]+remind*10)/16;

remind=(temp+remind*10)%16;

}b[p]=0;p++;

c[k++]=remind;

int flag=0;

for(i=p;i<len;i++)

if(b[i]!=0)

{flag=1;break;}

if(!flag) break;

}

for(i=k-1;i>=0;i--)

if(c[i]>=10)

printf("%c",c[i]-10+'A');

else

printf("%d",c[i]);

printf("\n");

}

}

當輸入Ctrl+Z時,程序運行結束.

這個我用的數組只能存100位數字,要修改可以直接修改下標..這個大數的算法其余就是模擬手算,妳直接考慮在紙上來算壹下,手動算,然後妳就知道怎麽求了.

註釋我沒標,我就大致說壹下這程序的思路.

輸入用char形,因為位數大的話,long long就無法存大數了,數組a可以存很多位.然後將a轉換為b[100] int型的..這樣就實現了用數組存每壹位了.

轉換16進制:

用筆在紙上隨便取個數,妳就知道怎麽轉換,這個while語句裏面就是用來轉換16進制的,轉換的每壹位用數組c來存,從低位到高位依次存.結束條件是b中每壹位均為0,表示已經轉換完畢了..

大致就是這樣了.

當然還可以簡單優化壹下,每個數組元素存多位數.不過為了妳能簡單看懂,我只寫了下每個數組元素只存壹位數,等妳這個弄懂之後,自然就會明白.

  • 上一篇:JAVA裏面如何打包?
  • 下一篇:編程老師晴川
  • copyright 2024編程學習大全網