ListView с текстом и изображением внутри фрагмента с вкладкой [дубликат]

Вот такой подход, который позволит вам найти очень большие факториалы.

Представляют большие числа в виде массива цифр. Например, 987 будет [9, 8, 7].

  1. Умножить это число на целое число n. Умножить каждое значение в этом массиве на n.
  2. Выполнить операцию переноса, чтобы вернуть результат это опять-таки одиночные цифры.

Например 987 * 2:

let arr = [9, 8, 7]
let arr2 = arr.map { $0 * 2 }
print(arr2)  // [18, 16, 14]

Теперь выполните операцию переноса. Начиная с одной цифры, 14 слишком велик, поэтому держите 4 и несите 1. Добавьте 1 в 16, чтобы получить 17.

[18, 17, 4]

Повторите с десяти места:

[19, 7, 4]

И затем со сто:

[1, 9, 7, 4]

Наконец, для печати вы можете преобразовать это обратно в строку:

let arr = [1, 9, 7, 4]
print(arr.map(String.init).joined())

1974


Применяя эту технику, здесь есть функция carryAll, которая выполняет операцию переноса, и factorial, которая использует ее для вычисления очень больших факториалов:

func carryAll(_ arr: [Int]) -> [Int] {
    var result = [Int]()

    var carry = 0
    for val in arr.reversed() {
        let total = val + carry
        let digit = total % 10
        carry = total / 10
        result.append(digit)
    }

    while carry > 0 {
        let digit = carry % 10
        carry = carry / 10
        result.append(digit)
    }

    return result.reversed()
}



func factorial(_ n: Int) -> String {
    var result = [1]
    for i in 2...n {
        result = result.map { $0 * i }
        result = carryAll(result)
    }

    return result.map(String.init).joined()
}

print(factorial(1000))

7671691324484262361314125087802080002616831510273418279777047846358681701643650241536913982812648102130927612448963599287051149649754199093422215668325720808213331861168115536158365469840467089756029009505376164758477284218896796462449451607653534081989013854424879849599533191017233555566021394503997362807501378376153071277619268490343526252000158885351473316117021039681759215109077880193931781141945452572238655414610628921879602238389714760885062768629671466746975629112340824392081601537808898939645182632436716167621791689097799119037540312746222899880051954444142820121873617459926429565817466283029555702990243241531816172104658320367869061172601587835207515162842255402651704833042261439742869330616908979684825901254583271682264580665267699586526822728070757813918581788896522081643483448259932660433676601769996128318607883861502794659551311565520360939881806121385586003014356945272242063446317974605946825731037900840244324384656572450144028218852524709351906209290231364932734975655139 5872055965422874977401141334696271542284586237738753823048386568897646192738381490014076731044664025989949022222176590433990188601856652648506179970235619389701786004081188972991831102117122984590164192106888438712185564612496079872290851929681937238864261483965738229112312502418664935314397013742853192664987533721894069428143411852015801412334482801505139969429015348307764456909907315243327828826986460278986432113908350621709500259738986355427719674282224875758676575234422020757363056949882508796892816275384886339690995982628095612145099487170124451646126037902930912088908694202851064018215439945715680594187274899809425474217358240106367740459574178516082923013535808184009699637252423056085590370062427124341690900415369010593398383577793941097002775347200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000

0
задан user1902535 21 February 2014 в 19:15
поделиться

1 ответ

Использовать

  CustomListViewAdapter adapter = new CustomListViewAdapter(getActivity(),
            R.layout.imglist, rowItems);

getActivity() возвращает активность, с которой связан этот фрагмент. Вам нужен контекст активности this

Редактировать:

   public class findFragment extends Fragment implements OnItemClickListener{

Вам нужно переопределить onItemClick

Сохранить

   list.setOnItemClickListener(this);
1
ответ дан Raghunandan 22 August 2018 в 16:58
поделиться
  • 1
    как насчет setOnItemClickListener, я все равно получаю за это ошибку. & quot; setOnItemClickListener (android.widget.AdapterView.OnItemClickListener) в AdapterView не может быть применен к (android.appActivity) & quot; – user1902535 21 February 2014 в 18:28
  • 2
    Класс должен реализовывать OnItemClickListener. Проверь это – Raghunandan 21 February 2014 в 18:29
  • 3
    Ошибка все еще возникает, imgur.com/GisOMwb – user1902535 21 February 2014 в 18:33
  • 4
    прекратить отправку ссылок – Raghunandan 21 February 2014 в 18:34
  • 5
    Вы не реализовали onItemClickListener для своего фрагмента. Измените свой вопрос с помощью вашего текущего кода. – Philipp Jahoda 21 February 2014 в 18:35
Другие вопросы по тегам:

Похожие вопросы: