为什么我在C ++中使用unsigned int和unsigned long int时得到两个不同的输出

时间:2015-02-09 04:20:17

标签: c++

我已经解决了UVa 100 - The 3n + 1 problem,我想出了这个解决方案

//UVa 100 - The 3n + 1 problem
//1.3 1st problem

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <math.h>
#include <string>
#include <map>
#include <algorithm>
#define SIZE 1234567
using namespace std;



int main(void) {

    int i = 1, j = 1000000;

    int arr[SIZE] = {0};

    unsigned int n = 0, temp_i = i, temp_j = j, res = 0, max = 0;

    while(temp_i <= temp_j) {
        n = temp_i;
        res = 1;
        while( n != 1 ) {
            if(n % 2 == 0) {
                n = n >> 1;             
                res += 1;
            }
            else {
                n = 3 * n + 1;
                n = n >> 1;
                res += 2; 
            }
        } 

        arr[temp_i] = res;

        ++temp_i; 
    }

    while( scanf("%d %d",&i,&j) != EOF ) {      
        temp_j = j;
        temp_i = i;
        if( i > j )
            i = ( i + j ) - ( j = i );
        max = 0;
        for(; i <= j; ++i)
            if(max < arr[i])
                max =  arr[i];      

        printf("%u %u %u\n",temp_i,temp_j,max);

    }

    return 0;
}

好的,这里一切都很好,但是当我使用

unsigned long int

unsigned long long int

取代

unsigned int

我收到错误或错误的结果。 这是一个例子

运行此代码并赋予值

626331 626331

现在在上面的程序中你会得到(哪个是正确的)

374

作为答案,当您使用unsigned long int或unsigned long long int更改unsigned int时,您将获得(这是错误的)

509 

作为答案,我完全困惑为什么我得到这个值:(

PS:我对格式说明符很小心,并尝试使用cin / cout代替scanf / printf,但没有运气。

0 个答案:

没有答案