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

у меня есть следующий код, который запрашивает у пользователя действительно длинное число, например, 100000000, и затем он печатает, сколько раз данная цифра появляется на этом числе, код работает нормально и все делает правильно, но профессор сказал мне, что мне не нужно использовать строки или символы, но когда код запрашивает у пользователя число, ему обязательно нужна строка, и я не знаю, как ее изменить, я использовал библиотеку gmp

#include <iostream>
#include <stdio.h>
#include <gmp.h>
#define MAX 40

using namespace std;

void searchDigit(FILE *fd);
int NewNumber();

int main()
{
FILE *fd;
int otherNumber;
string text;
mpz_t num;
do
{
if((fd = fopen("File.txt","w+"))!= NULL)
{
mpz_init(num);
cout << "Give me the number: " << endl;
cin >> text;
mpz_set_str(num,text.c_str(),10);
mpz_out_str(fd,10,num);
fclose(fd);
searchDigit(fd);
otherNumber = NewNumber();
}
else
cout << "Fail!!" << endl;
}while(otherNumber);
return 0;
}

void searchDigit(FILE *fd)
{
int car,continue = 1,r;
char answer,digit;
if((fd = fopen("File.txt","r"))!= NULL)
{
do
{
r = 0;
fseek(fd,0,SEEK_SET);
cout << "What digit do you want to search? " << endl;
cin >> digit;
while((car = fgetc(fd))!= EOF)
{
if(car == digit)
r++;
}
cout << "The digit x=" <<digit<< " appears " << r << " times" << endl;
cout << "Do you want to search any other digit? " << endl;
cin >> answer;
if(answer != 'S')
continue = 0;
}while(continue);
}
else
cout << "Fail!!" << endl;
}

int NewNumber()
{
char answer;
cout << "DO you wish to work with a new number? " << endl;
cin >> answer;
if(answer == 'S' || answer == 's')
return 1;
else
return 0;
}

заранее спасибо

1

Решение

Зависит от того, насколько большим может быть ваш ввод … но для получения цифр вы можете сделать что-то вроде:

#include <iostream>
using namespace std;

typedef unsigned long long UINT64;

int main() {
UINT64 i;
std::cin >> i;
while (i >= 1) {
int digit = i % 10;
std::cout << digit << " ";
i /= 10;
}
}

вход: 18446744073709551614

выходы: 4 1 6 1 5 5 9 0 7 3 7 0 4 4 7 6 4 4 8 1

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector