博文

[原创]四行代码算1000阶乘精确值(2007-04-24 13:19:00)

摘要:#include<stdio.h>#define N 1000    //要计算的Nlong s[N]={1,1},n=N,t=2,a=1,b=0;int main()//雨中飞燕之作{    for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)        s[a]=(b+=s[a]*t)%10000,b/=10000;    for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);    return 0;}在VC6,DevC,Code::Block上测试,算1000!用时毫秒级最少字节数版本(从long定义变量开始计算共155字节,不计算换行)#include<stdio.h> //雨中飞燕之作#define N 1000 //要计算的Nlong s[N]={1},n=10000,t=2,a,b,m;main(){for(;a<=m||++t<=N&&(a=b=0,1);m==a++&&b&&m++)s[a]=(b+=s[a]*t)%n,b/=n;for(printf("%d",s[m]);m--;)printf("%04d",s[m]);}附1000!的精确值:402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476......

阅读全文(14814) | 评论:77

实时控制输入内容的长度(2007-04-13 20:23:00)

摘要:以下代码(GetStringEX函数)能实现在控制台下有类似WindowsGDI界面的文本框最大输入文本长度的那种效果,个人感觉效果不错哈哈#include <stdio.h>    //putchar#include <conio.h>    //getch#include <windows.h>  //MessageBeepint GetStringEX(char* cpBuffer,int nMaxChars){    int cInput, nCount = 0;    while( (cInput = getch()) != '\r' )    {        if(cInput == '\b') //BackSpace        {            if(nCount > 0)            {                nCount--, printf("\b \b");          &nbs......

阅读全文(3351) | 评论:3

生成奇数阶等和幻方代码(超短)(2007-04-14 08:55:00)

摘要:很短,但应该不是最短,仅用循环来完成#include <stdio.h>  //头文件 版本一(数字1在中间偏右):int main(){    long nList[19][19],n=0,n1,n2,nh;    while(n%2==0)scanf("%d",&n);//输入阶数    for(n2=n*n,n1=0,nh=n/2;n1<n2;n1++)//计算生成        nList[(n1*(n-1)+nh+n1/n)%n][(n1+nh+1+n1/n)%n]=n1+1;    for(n2=0;n2<n;n2++)//结果输出    {        for(n1=0;n1<n;n1++)printf("%4d",nList[n2][n1]);        printf("\n");    }    return 0;}版本二(数字1在第一行中间):int main(){    long nList[31][31],n=0,n1,n2;    while(!(n&1))scanf("%d",&n);//输入阶数    for(n2=n*n,n1=0;n1<n2;n1++)//计算生成        nList[(n1*(n-1)+(n1/n)*2)%n][(n1+(n>>1)-n1/n)%n]=n1+1;    for(n2=0......

阅读全文(4656) | 评论:10

解Joseph(约瑟夫)环问题的牛代码(2007-03-29 08:22:00)

摘要:摘录自本网站论坛(原作者不清楚,知情者请留言告诉偶)问题描述:n个人围成一个环,编号1-n,然后从1号开始报数,报m的出列,下一个人再从1开始报,求出列的人的编号顺序(或者求谁最后出列)#include <stdio.h>#include <conio.h>int main( void ){    int n, i = 0, m, p;    scanf("%d%d", &n, &m); //n总人数,m步长    while( ++i <= n )    {        p = i * m;        while (p > n)            p = p - n + (p - n - 1)/(m - 1);        printf("%d\n", p);    }    getch();return 0;}......

阅读全文(7592) | 评论:25

关于两组有序数据组合成一组有序数据的问题(2007-03-26 18:35:00)

摘要:从小到大排序好的数据连接生成新的数据(也是从小到大),并且要去掉重复数据这里用字符串作为例子,完成本功能的函数是combineStr旨在示例一下指针的操控(运用了指向指针的指针)//字符串连接 *pTag 目标字符串  *pa和*pb要进行连接的字符串void combineStr(char *pTag ,char *pa,char *pb){    char **pp;pTag--;    while(*pa||*pb)    {        if(!*pb || *pa && *pa<=*pb)pp=&pa;else pp=&pb;        if(*pTag!=**pp)*++pTag=**pp;(*pp)++;    }}//字符串排序void sort(char *cpStr){    char *pa,*pb,ct;    for(pa=cpStr;*pa;pa++)for(pb=pa+1;*pb;pb++)    if(*pa>*pb)ct=*pa,*pa=*pb,*pb=ct;}//主函数mainint main(void){    char a[256]={0},b[256]={0},c[512]={0};    scanf("%s",a);getchar();sort(a);    scanf("%s",b);g......

阅读全文(4108) | 评论:9