?? 邊鋒密碼保護計算器.txt
字號:
邊鋒密碼保護計算器
#include <stdio.h>
#include <conio.h>
/*本程序是為邊鋒的密碼保護用的計算器,第一行是兩步結果,第二行是四步結果*/
/*應mb459同學,發表到網上,如果錄用,算在mb459上*/
/*程序大部分是土著人(yujiezuo)做的,我只負責小部分程序及修改調試工作*/
/*程序的精華部分在第二個子程序,就是void cryptogram(int *),這個是yujiezuo做的,
當時我們分別用自己的算法,自己寫程序,結果我的失敗了:-( */
/*程序中有一個goto語句,是c#的大忌,如果看懂程序的話,很容易去掉的
在main函數里完全可以去掉,這樣程序運行一次只能計算一次
*/
/*這個程序最主要的是程序的健壯性,我們在這上面花了不少心血,程序運行后不管你輸入什么非法字符,都會有相應的語句,還支持退格*/
/*progammed by yujiezuo&GW ----GW*/
void thenumber(int g[]) /*取20位基數,輸入20位后自動彈出,無需敲回車*/
{
int i,c,lenth,y;
char pr[30]="\nplease input the number:";
lenth=strlen(pr);
for(i=0;i<20;i++)g[i]=0;
printf(pr);
for(i=0;i<20;i++)
{
c=getche();
if(c==8)
{
i-=2;
printf(" \b");
if(i<-1)
{
printf(":");
i++;}
continue;
}
g[i]=(c-48);
if(g[i]>10 || g[i]<0)
{
printf("\a");
if(g[i]==-35) /*對回車的抵御*/
{
y=wherey();
gotoxy(lenth+i,y);
}
else printf("\b \b"); /*其余非法字符*/
i--;
continue;
}
}
}
void cryptogram(int g[]) /*取得密碼,密碼會被*覆蓋,程序的精華呀*/
{
int i,c,k=0,h[20]; /*k是計數器,花了好長時間才調試出來的*/
for(i=0;i<20;i++){g[i]=0;h[i]=0;}
printf("\nplease input your cryptogram:");
for(i=0;i<20;i++)
{
c=getche();
k++;
if(c==8) /*對退格鍵的處理*/
{
i-=2;
printf(" \b");
if(i<-1) /*如果還沒敲數字就退格就會發生錯誤,這是對這種情況的處理*/
{
printf(":");
k++;
i++;
}
k-=2;
continue;
}
if(c==13){k=k-1;break;} /*回車,輸入完畢*/
if(c>58 || c<48) /*對非數字的處理*/
{
k--;
i--;
printf("\b \b");
continue;
}
g[i]=c-48;
printf("\b*"); /*這個就是用*覆蓋密碼*/
}
for(i=(20-k);i<20;i++)h[i]=g[i+k-20];
for(i=0;i<20;i++)g[i]=h[i]; /*總之程序的健壯性是非常好的*/
}
void twoadd(int g[],int h[]) /*(因為20位數太長了,只能放在數組里了),是兩個20位數組相加,結果放在第一個數組里*/
{
int y[21],i; /*y[]是進位存儲器*/
y[20]=0;
for(i=19;i>=0;i--)
{
g[i]=g[i]+h[i]+y[i+1];
y[i]=g[i]/10;
g[i]%=10;
}
}
void tenadd(int g[],int h[]) /*兩個10位數組相加*/
{
int z[11],i; /*z[]是進位存儲器*/
z[10]=0;
for(i=9;i>=0;i--)
{
g[i]=g[i]+h[i]+z[i+1];
z[i]=g[i]/10;
g[i]%=10;
}
}
void newone(int g[],int h[]) /*生成新的20位數組*/
{
int i;
for(i=0;i<20;i++)
{
if(!g[i])
g[i]=10;
g[i]=h[g[i]-1];
}
}
void main()
{
int i,l,a,b;
int m[20],n[20],x[10],y[10];
next:
for(i=0;i<20;i++)
{
m[i]=0;
n[i]=0;
}
for(i=0;i<10;i++)
{
x[i]=0;
y[i]=0;
}
thenumber(m);
printf("\n\n");
cryptogram(n);
twoadd(m,n);
for(i=0;i<10;i++)
{
x[i]=m[i];
y[i]=m[i+10];
}
tenadd(x,y);
printf("\n\n\n");
for(i=0;i<10;i++)
printf("%d",x[i]);
printf("\n\n\n");
newone(m,x);
for(i=0;i<10;i++)
{
x[i]=m[i];
y[i]=m[i+10];
}
tenadd(x,y);
printf("\n\n");
for(i=0;i<10;i++)
printf("%d",x[i]);
printf("\n\n\n");
printf("press any two same keys to exit\nor press Esc to exit\npress Enter to continue\n");
a=getche();
if(a==27)exit();
if(a==13)goto next;
b=getche();
if(a-b)goto next;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -