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

Работа с цифрами - C++

Восстановить пароль Регистрация
 
blecklov
11 / 11 / 2
Регистрация: 07.08.2009
Сообщений: 85
26.10.2011, 01:16     Работа с цифрами #1
Не могу понять, что в программе не так. Алгоритм правильный, но расчет не идет.

Исходное задание:
Напишите программу, принимающую с консоли большое целое число и выводящую его на консоль с разделителями-запятыми после каждых трех цифр. Например, 123654004 -> 123,654,004. Программа должна принимать большое целое с консоли следующим образом:

long lNum;
std::cin >> lNum;

и выводить его на консоль с помощью массива символов:

char Str[?]; // какова должна быть размерность массива?
std::cout << Str << "\n";

Программа не должна использовать библиотечные функции для работы со строками.

----------------------------------------------------------------------------------------------

Примечания

1. Рассмотрите возможность применения циклов for, while и do while. Какой вариант лучше?

2. Для инкрементирования переменных используйте оператор ++. Его можно использовать двояко - как постфиксный (i++) и как префиксный (++i). Выражение y = x++ интерпретируется компилятором так: присвоить переменной y значение x и увеличить x на единицу. Выражение y = ++x выполняется в другом порядке: увеличить x на единицу и присвоить переменной y новое значение x. Если короче, то i++ означает "воспользоваться i, а потом увеличить", а ++i – "сначала увеличить i, а потом уже воспользоваться".

3. Используйте оператор % - остаток от целочисленного деления.

4. Для корректной работы операции std::cout << Str << '\n' массив символов Str должен заканчиваться нулевым символом '\0'.

мой код

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
30
31
32
#include <iostream>
 
void main(){
long lNum;
std:: cin >> lNum;
int a,b,d,i,h,n;
char X[13];
d=1;
a=1;
b=1;
for (i=1;i<10;i++){
d=10*d;
a=lNum/d;
if (a==0)
 n=i;
}
d=1;
for ( i=0; i<n; i++)
{
    d=d*10;
    a=lNum/d;
    b=a%d;
    h=48+b;
    if (a/3!=0)
            X[13-i]=h;
    else 
    X[13-(i+1)]=',';
}
for (i=0; i<14; i++){
std:: cout <<X[i];  
}
}
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 01:16     Работа с цифрами
Посмотрите здесь:

C++ Работа с цифрами
C++ работа с цифрами заданного Числа
C++ задача с цифрами
задача с натуральными цифрами C++
Работа с цифрами в числе C++
Замена слов цифрами C++
C++ Работа со звуком (как звуковые спектры определённого звукового файла записать цифрами в массив)
C++ Заполнение массива цифрами от 1 до 8

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
26.10.2011, 03:06     Работа с цифрами #2
если я не ошибаюсь unsigned long int от 0 до 4294967295
отсюда у вас будет максимум в массиве 10 цифр и 3 запятые. соответственно размер массива равен 13.
вот у меня вот такое решение получилось.
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
30
31
#include "stdafx.h"
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int main(){
    long lNum;
    char x[13];
    int comma=0, r = 0;
    std::cout << "Enter number: ";
    std:: cin >> lNum;
 
    while(lNum > 0){
        if((r-comma)%3 == 0 && lNum>0 && r > 0){
            x[r] = ',';
            comma++;
            r++;
        }
        x[r] = lNum%10+'0';
        lNum = lNum/10;
        (lNum > 0) ? r++ : r;
    }
    for(int i = r; i >=0; --i){
        cout << x[i];
    }
        cout << endl;
    system("pause");
    return 0;
}
Yandex
Объявления
26.10.2011, 03:06     Работа с цифрами
Ответ Создать тему
Опции темы

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