Witam,
Załóżmy że mam trzy inty:
a=2, b=3, c=4
. I chcę je "skleić" w jeden int d=234
jak mogę tego dokonać?
Witam,
Załóżmy że mam trzy inty:
a=2, b=3, c=4
. I chcę je "skleić" w jeden int d=234
jak mogę tego dokonać?
Użyj własności pozycyjności systemu liczbowego. Pomnóż c razy 100, b razy 10 i dodaj wszystko razem.
Dzięki za odpowiedź, jednak taka metoda będzie problematyczna gdy (oczywiście ja tak mam zrobić) liczba intów do sklejania nie będzie wiadoma (n) może ona okazać się bardzo duża.
@Edit: zakładając że n = 100 wtedy trzeba będzie uzyskać liczbę 10^100. Czy istnieje jakiś inny sposób?
Chcesz uzyskać liczbę czy napis?
Chodzi właśnie tu o liczbę, konkatenacja stringów nie będzie się sprawdzać w tym przypadku niestety.
W typie int nie przechowasz liczby stucyfrowej.
To i tak zbyt wielu tych cyfr nie złączysz jeżeli chcesz się zmieścić w typach wbudowanych. Jeżeli nie wiesz ile tych cyfr będzie to w zwykłej pętli możesz podnosić 10 do potęgi i
.
To może sklej wszystkie liczby do stringa i później z powrotem do liczbowego ale nie wiem czy to najszczęśliwsza metoda albo wczytuj te liczby jako stringi łącz i potem konwersja. Ale i tak masz małe pole manewru:
int -2,147,483,648 to 2,147,483,647
uint 0 to 4,294,967,295
Dzięki za pomoc, problem polega na tym że mam do napisania algorytm który będzie generował liczby w porządku leksykograficznym np. dla n=5 i k=3 będą to 111,112,113,114,115,121,122,...,555 i nie wiem jak to rozwiązać, może jakieś sugestie.
@Edit: może dla ułatwienia załóżmy że liczba może być w postaci tablicy np (1,1,1) tab[0]=1, tab[1]=1, tab[2]=1 itd.
#include <vector>
#include <iostream>
using namespace std;
void gen(unsigned n,unsigned k,const char alphabet[])
{
vector<unsigned> tb(k);
for(unsigned i=0;i<k;)
{
for(i=0;i<k;++i) cout<<alphabet[tb[i]];
cout<<endl;
--i;
while((i<k)&&(++tb[i]>=n)) tb[i--]=0;
}
}
int main()
{
gen(5,3,"12345");
return 0;
}