Форум программистов, компьютерный форум CyberForum.ru

itoa - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.80
Argos
1 / 1 / 0
Регистрация: 14.01.2011
Сообщений: 82
01.04.2011, 13:08     itoa #1
Почему Itoa (ltoa, ultoa) переводит неправильно при n=299999?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"
int main()
{
    int n;
    scanf("%i",&n);
    long long int _2=1,_3=1,_4=1; 
    for(int i=0;i<n;i++)
    {
        _2=_2*2;
        _3=_3*3;
        _4=_4*4;
    }
    long long int K=1+_2+_3+_4;
    printf("%I64d\n",K);
    char M[600000]={NULL}; 
    ultoa(K,M,10);
    printf("%s",M);
    int D=strlen(M);
    int Count=0;
    for(int i=0;i<D;i++)
    {
        if(M[i]=='0') Count++;
    }
    printf("%i",Count);
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2011, 13:08     itoa
Посмотрите здесь:

C++ дополнение к itoa()
C++ itoa();
unsigned itoa and atoi C++
Не работает функция itoa C++
C++ функции atoi и itoa
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 13:35     itoa #2
Цитата Сообщение от Argos Посмотреть сообщение
long long int _2=1,_3=1,_4=1;
Не делайте так.
Цитата Сообщение от Argos Посмотреть сообщение
char M[600000]={NULL};
Респект тебе.

Цитата Сообщение от Argos Посмотреть сообщение
переводит неправильно при n=299999?
C++
1
for(int i=0;i<n;i++) { _2=_2*2; _3=_3*3; _4=_4*4; }
2^299999 не влезает в 64 битное целое. Ну никак. Даже при n=64 уже неправильно будет.
Гы-гы.
Про умножение на 3 и 4 я просто умолчу, оК?
Argos
1 / 1 / 0
Регистрация: 14.01.2011
Сообщений: 82
01.04.2011, 13:41  [ТС]     itoa #3
[QUOTE=Argos;1509778]
C++
1
long long int C;
тоже самое что и
C++
1
__int64 C;
2^299999 не влезает в 64 битное целое. Ну никак. Даже при n=64 уже неправильно будет.
Пусть возводит неправильно.
Но почему itoa не правильно переводит?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 14:28     itoa #4
Цитата Сообщение от Argos Посмотреть сообщение
почему itoa не правильно переводит?
Как оно может переводить правильно, когда у тебя 5000 раз происходит переполнение?
Сперва напиши программу так, чтобы не было переполнения, а потом уже строку из числа делай.

Для тех, кто не в курсе: __int64 - 64 битное целое. Это всего 18 знаков. Не 600000, а Восемнадцать.

Ещё что-то не ясно?

Добавлено через 48 секунд

Не по теме:

Почему itoa не правильно переводит мусор?

^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
01.04.2011, 15:48     itoa #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void itoa(char str[256]){
int i;
 
char buf[80];
char url[256];
char yn[80];
int x=0;
i=0;
 
 
while(str[i]){
   _itoa_s( (unsigned char)str[i], buf, 2);    
    printf( "%s", buf );
 
        i++;
}
 
printf( "\n" );
 
 
 
}
Добавлено через 7 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Почему itoa не правильно переводит мусор?
потому что мусор это мусор,а не число...

напишите такое
C++
1
2
int a;
cout<<a<<endl;
Скопируйте число и переведите.
потом вставьте это же число,и посмотрите на результат.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 16:03     itoa #6
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
потому что мусор это мусор,а не число...
Это был риторический вопрос...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.04.2011, 16:23     itoa #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
Почему itoa не правильно переводит мусор?
Хм... Почему же неправильно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    int a;
    char str[20];
 
    std::cout << "Num = " << a << std::endl;
    std::cout << "Str = " << itoa(a, str, 10) << std::endl;
 
    return 0;
}
Вывод:

Код
Num = 13334369
Str = 13334369

Не по теме:

Это я дурака валяю, если что)))

Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 16:58     itoa #8

Не по теме:

А теперь возведи 2 в степень 299999 и скажи, "почему itoa не правильно переводит?"


.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2011, 17:01     itoa
Еще ссылки по теме:

C++ не работает itoa
C++ Itoa И String
C++ Реализация функции itoa

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
01.04.2011, 17:01     itoa
  #9

Не по теме:

Deviaphan, не, воздержусь

Yandex
Объявления
01.04.2011, 17:01     itoa
Ответ Создать тему
Опции темы

Текущее время: 09:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru