int ws(long long n)         //位数 
{
    int i=1,p;
    long long s,t,ss,tt;
    for (i=9;i>=0;i--)
    {   ss=tenpow(i+1);
        tt=tenpow(i);
        s=n%ss; 
        t=n%tt; 
        if(n==s && n!=t){p=i+1;return p;}
        }
    }
int main()
{
	int p,xx;
    int a[N],b[N],c[N];                                          //b[]大数,c[]小数    xx为下限                                               // 
    long long n[N],big,small,jiangyou;
    //printf("请输入一个至少3位至多9位数"); 
   while( scanf("%lld",&n[1])==1)
   {
    p=ws(n[1]); 
    int count=1,j,l,k,m,flag=1,i,q,ff=1; 
	small=0,big=0;
for(j=1;j<=p;j++){a[j]=0;}
jiangyou=n[count];
for(j=1;j<=p;j++)
                     {
                     a[p-j+1]=jiangyou%10;
                     jiangyou/=10;
                     }
m=p*(p-1)/2;
for(i=1;i<=10;i++){b[i]=a[i];c[i]=a[i];}
for(i=1;i<=m;i++)  
{  
for(j=1;j<=p-1;j++)  
    {
                     if(b[j]>=b[j+1])   {q=b[j];b[j]=b[j+1];b[j+1]=q;  }  
    }  
}  
for(i=1;i<=m;i++)  
{  
for(j=1;j<=p-1;j++)  
    {
                     if(c[j]<=c[j+1])   {q=c[j];c[j]=c[j+1];c[j+1]=q;  }  
    }  
}
int ccc=1;
for(i=p;i>=1;i--)if(c[i]!=0)break;ccc=i++;
int temp;//printf("%d 9%d\n",ccc,p);
temp=c[ccc];c[ccc]=c[p];c[p]=temp;
for(i=1;i<=p;i++){big+=b[i]*tenpow(i-1);}
for(i=1;i<=p;i++){small+=c[i]*tenpow(i-1);}
count++;
n[count]=big-small;
printf("%lld - %lld = %lld = 9 * %lld\n",big,small,n[count],n[count]/9); 
}
return 0;
	} 
예제 #3
0
long findVal (char number[], int len) {
	int var=0, count=0;
	long returnVal=0;

	for (var = len-1, count=0; var >= 0; --var, ++count) {
		returnVal += number[var]*tenpow(count);
	}
	return returnVal;
}
예제 #4
0
/* generate a random number */
void gen_rand(int ans_digits[]) {
    srand((unsigned)time(NULL));
    int ans = 1000 + (int)(8999.0*rand()/RAND_MAX);
    for(int i=0; i<4; i++)
        ans_digits[i] = (int)(ans/tenpow(3-i)) % 10;

    /* if 4 digits is not different from each other, regenerate it*/
    while(ans_digits[0]==ans_digits[1] || ans_digits[1]==ans_digits[2]
            || ans_digits[2]==ans_digits[3] || ans_digits[0]==ans_digits[2]
            || ans_digits[0]==ans_digits[3] || ans_digits[1]==ans_digits[3])
    {
        ans = 1000 + (int)(8999.0 * ((double)rand()/RAND_MAX)); 
        for(int i=0; i<4; i++)
            ans_digits[i] = (int)(ans / tenpow(3-i))%10;
    }
#ifdef DEBUG
    printf("%d\n", ans);
#endif
}
예제 #5
0
/* enter a 4-digit number */
int enter_number() {
    char mstr[5]={'\0','\0','\0','\0','\0'}; 
    int c;
    int input;
    int in_digits[4]={0,0,0,0}; /* arrays for the 4 digits of input*/
    bool reinput;
    do {
        reinput = false;
        printf(_("Input a 4-digit number:"));
        if(fgets(mstr, sizeof mstr, stdin) == NULL)
            err_exit(_("Something's got wrong, I'd better quit...\n"));
        // fgets appends the newline entered, if it appears in the first 4
        // elements of mstr, then it's sure less than 4 digits are entered
        bool flag = false;
        if(mstr[0]!='\n'&& mstr[1]!='\n'&& mstr[2]!='\n' &&mstr[3]!='\n') 
            /* discard the character */
            while((c = getchar()) != '\n' && c != EOF)
                flag = true;
        if (flag == true) {
            fprintf(stderr, _("Input too long!\n"));
            reinput = true;
            continue;
        }
        input = atoi(mstr);
        if (input < 1000 || input > 9999) {
            fprintf(stderr, _("Must be a number between 1000 and 9999!\n"));
            reinput = true;
            continue;
        }
        for(int i=0; i<4; i++)
            in_digits[i]=(int) (input / tenpow(3-i) )%10;
        if(in_digits[0]==in_digits[1] || in_digits[1]==in_digits[2] 
                || in_digits[2]==in_digits[3] || in_digits[0]==in_digits[2]
                || in_digits[0]==in_digits[3] || in_digits[1]==in_digits[3])
        {
            fprintf(stderr, _("Four digits must be unique.\n"));
            reinput = true;
            continue;
        }
    }while(reinput);
    return input;
}
예제 #6
0
int main(int argc, char *argv[]) {
    int opt = 0;
    int longIndex = 0;

    /* Initialize globalArgs before we get to work. */
    globalArgs.version = NULL;    /* false */

	//prepare i18n
	setlocale(LC_ALL, "");
	bindtextdomain("4digits", LOCALE_PATH);
	textdomain("4digits");

    // Process the arguments with getopt_long(), then populate globalArgs
    opt = getopt_long(argc, argv, optString, longOpts, &longIndex);
    while(opt != -1) {
        switch(opt) {
            case 'v':
                globalArgs.version = VERSION_STRING;
                printf("%s\n%s\n%s", VERSION, _(COPYRIGHT), _(AUTHOR));
                exit(1);
            case 'h': 
                err_exit(_(HELP));
                break;
            case '?': /* fall-through is intentional */
                err_exit(_("Usage: 4digits [OPTION]...\n"
                        "Try `4digits --help' for more information."));
                break; 
            case 0:    /* long option without a short arg */
                if(strcmp("version", longOpts[longIndex].name) == 0)
                    break; 
                break;
            default:
                /* You won't actually get here. */
                break;
        }
        opt = getopt_long(argc, argv, optString, longOpts, &longIndex);
    }

    int ans_digits[4];
    gen_rand(ans_digits); /* array for the 4 digits of n*/
    time_t temp = time(NULL);
    time_t tic = temp;
    int guessed[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    int i;
    bool dup = false;

    for (int num_guess = 0; num_guess < 8; num_guess++) {
        int A = 0, B = 0;
        int input = enter_number();

        for(int i=0; i < num_guess; i++)
            // duplicated input
            if (input == guessed[i]) {
                fprintf(stderr, _("You've already guessed it.\n"));
                --num_guess;
                dup = true;
                break;
            }

        if (dup == true) {
            dup = false;
            continue;
        }

        int in_digits[4]; /* arrays for the 4 digits of input*/
        for(i=0; i<4; i++) {
            in_digits[i]=(int) (input / tenpow(3-i) )%10;
        }

        compare(in_digits, ans_digits, &A, &B);
        printf("%dA%dB    ", A, B);
        if (num_guess != 7)
            printf(ngettext("\t %d time left.\n", "\t %d times left.\n", 7-num_guess), 7-num_guess);
        guessed[num_guess] = input;

        if(A == 4) {
            time_t toc = time(NULL);
            int score = (int)(toc-tic);
            printf(_("You win! :) Used %d sec.\n"), score);
            save_score(score); /* save score in the score file */
            return 0;
        }
    }
    printf(_("\nHaha, you lose. It is "));
    for(int i = 0; i < 4; i++)
        printf("%d", ans_digits[i]);
    printf(".\n");
    return 0;
}
예제 #7
0
int validateInputLength (long val) {
	if (val < tenpow(1) || val >= tenpow(MAX_DIGITS))
		return 0;
	return 1;
}
예제 #8
0
long tenpow(int n){
	if (n <= 0)
		return 1;
	return 10*tenpow(n-1);
}