大數模和大數除,壹會兒幫妳寫壹個,先占個位置.
//抱歉,有事去了,寫了壹半沒寫.現在發壹下我寫的.
#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,表示已經轉換完畢了..
大致就是這樣了.
當然還可以簡單優化壹下,每個數組元素存多位數.不過為了妳能簡單看懂,我只寫了下每個數組元素只存壹位數,等妳這個弄懂之後,自然就會明白.