#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;
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |