2015-01-19 2 views
-3

Итак, у меня было задание о суммировании всех цифр числа. Например, если число равно 2367, добавьте 2 + 3 + 6 + 7.Преобразование числа в строку

Однако проблема в том, что число огромно (2^325), что составляет около 106 цифр. Я пытался использовать double или float, но проблема в том, что число отображается только как 0 после 10 цифр или около того, чтобы быть точным.

Другая проблема: я не знаю, должен ли я преобразовать число в строку или массив, а затем добавить все позиции строки или массива (например, массив [1] + массив [2] + ... array [n]).

Если я прав, как я могу преобразовать число в массив/строку?

Спасибо! Я только узнал, C, так что я даже не знаю, как изменить это в C++

Начинающий программист здесь :(

Еще раз спасибо!

+4

Просто прочитайте цифры как символы, преобразуйте их в число ('digit-'0'') и добавьте его в свою сумму. –

+1

Эта проблема уходит полностью, если вы относитесь к ним как к «цифрам» вместо «цифр одного, огромного числа» –

+0

@Jerry Coffin Как я могу конвертировать a let say double или float в символы? Должен ли я преобразовать их в строку или массив? Или как вы упомянули цифры? Извините, я довольно новичок, поэтому у меня нет хорошей идеи относительно того, что вы имеете в виду. – Seung

ответ

2

Самое простое решение сохранить свой номер как std::string. std::string могут быть доступны как массив

чтобы преобразовать числовой символ, например, «3», в число, вычесть символ «0» из него
Пример:..

unsigned int value_of_3 = '3' - '0'; 

Чтобы скомпоновать все цифры, прокрутите строку, символ по символу. Для каждого числового символа вычитайте «0», затем добавьте результат к переменной суммы.

Редактировать 1:
Иллюстративные чертежи. Учитывая число 2367 в виде строки «2367», у вас есть массив:

+-----+-----+-----+-----+ 
| '2' | '3' | '6' | '7' | 
+-----+-----+-----+-----+ 

Пусть строка будет называться digit_string.
Значение digit_string[1] имеет значение «3», как на диаграмме выше.

Чтобы получить числовое значение 2-го слота:

unsigned numeric_value = digit_string[1] - '0'; 

Это приводит к numeric_value == 3;.

+0

У меня есть вопрос, хотя, если мой номер является двойным (2^352), тогда я должен поместить его примерно так: double value = pow (2, 352) , потому что я не получаю, как я могу преобразовать pow (2, 352) в строку, чтобы мое значение [0] = x и значение [1] = y и т. Д. И т. Д., Чтобы добавить их? – Seung

+0

Число 2^352 не является двойным, это целое число. С помощью метода, представленного выше, вы вводите число как строку, а не как double или integer, а как строку. –

+0

Ой, ладно, я понимаю, что вы имеете в виду. Я все еще сомневаюсь, что, определяя его как целое число, как я могу определить pow (2, 352) как строку, так как у меня нет всех 102 значений, чтобы определить его как строку с самого начала. Мне очень жаль всю путаницу, так как я новичок в этом, у меня действительно много сомнений – Seung

0

Это ответ на вопрос заголовка, чем последующие вопросы в описании. Простым способом преобразования числа в строку является вывод значения в поток и извлечение содержимого строки потока.

int streetNumber = 2500; 
string streetNumberStr; 
ostringstream os; 
os << streetNumber; 
streetNumberStr = os.str(); 
Смежные вопросы